/*
 * Copyright 2012 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#include "PathOpsExtendedTest.h"

#define TEST(name) { name, #name }

#define TEST_NEW_FAILURES 0

static void skpcheeseandburger_com225(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(555, 468);
    path.lineTo(555, 362);
    path.lineTo(872, 362);
    path.lineTo(872, 468);
    path.lineTo(555, 468);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(859.11792f, 397.320343f);
    pathB.cubicTo(855.523071f, 399.691284f, 853.721191f, 402.40863f, 853.721191f, 405.552216f);
    pathB.cubicTo(853.721191f, 407.911163f, 854.727478f, 410.115387f, 857.043518f, 412.252716f);
    pathB.cubicTo(859.920532f, 414.916138f, 862.704773f, 417.086426f, 864.679382f, 418.852386f);
    pathB.cubicTo(866.382446f, 420.371765f, 867.19104f, 422.108795f, 867.19104f, 423.506378f);
    pathB.cubicTo(867.19104f, 424.551605f, 866.741821f, 425.539886f, 865.935242f, 426.281616f);
    pathB.cubicTo(865.250366f, 426.910553f, 864.662415f, 427.339813f, 864.139282f, 427.4646f);
    pathB.cubicTo(863.536377f, 427.605347f, 862.259521f, 426.491272f, 860.366821f, 424.208191f);
    pathB.cubicTo(858.345276f, 421.770355f, 857.317017f, 419.733856f, 857.317017f, 417.98587f);
    pathB.cubicTo(857.317017f, 417.198212f, 857.942993f, 415.930389f, 857.942993f, 415.930389f);
    pathB.cubicTo(857.942993f, 415.930389f, 852.106018f, 421.296173f, 852.279663f, 422.549042f);
    pathB.cubicTo(852.462402f, 423.890747f, 853.669312f, 425.703613f, 855.876465f, 428.252258f);
    pathB.cubicTo(858.038818f, 430.754944f, 859.4953f, 431.840088f, 860.190125f, 431.594513f);
    pathB.cubicTo(862.571045f, 430.754944f, 865.48999f, 429.237549f, 868.44397f, 427.018372f);
    pathB.cubicTo(870.505371f, 425.470032f, 871.582581f, 423.534332f, 871.582581f, 421.001678f);
    pathB.cubicTo(871.582581f, 417.945923f, 870.056213f, 415.171692f, 867.015381f, 412.640045f);
    pathB.cubicTo(863.683105f, 409.872803f, 861.445923f, 408.027954f, 860.551514f, 407.140503f);
    pathB.cubicTo(858.660767f, 405.264709f, 857.765259f, 403.50174f, 857.765259f, 402.187988f);
    pathB.cubicTo(857.765259f, 401.141785f, 858.339355f, 400.394073f, 859.476318f, 399.925873f);
    pathB.cubicTo(860.004395f, 399.704254f, 861.270264f, 400.515869f, 863.156006f, 402.36969f);
    pathB.cubicTo(865.094727f, 404.28241f, 866.203796f, 405.565186f, 866.383484f, 406.130219f);
    pathB.cubicTo(868.250244f, 404.305359f, 869.179688f, 403.397919f, 871.046509f, 401.58902f);
    pathB.cubicTo(868.26825f, 399.296967f, 864.431824f, 394.705841f, 863.156006f, 394.600037f);
    pathB.cubicTo(863.145996f, 394.600037f, 863.136108f, 394.59903f, 863.126099f, 394.59903f);
    pathB.cubicTo(862.352417f, 394.598022f, 859.909607f, 396.79425f, 859.11792f, 397.320343f);
    pathB.moveTo(832.164246f, 394.307526f);
    pathB.cubicTo(832.451721f, 394.425323f, 832.598511f, 394.486206f, 832.886963f, 394.605011f);
    pathB.cubicTo(834.078979f, 395.474518f, 834.674927f, 395.90979f, 835.867859f, 396.781281f);
    pathB.cubicTo(836.502808f, 397.325348f, 836.863159f, 398.000183f, 836.863159f, 398.964539f);
    pathB.lineTo(836.863159f, 419.740845f);
    pathB.cubicTo(836.863159f, 420.876923f, 836.319092f, 422.17868f, 835.055298f, 423.617188f);
    pathB.cubicTo(836.39502f, 424.512665f, 837.063843f, 424.961884f, 838.39856f, 425.864349f);
    pathB.cubicTo(839.477661f, 426.578125f, 841.37439f, 427.27594f, 842.275879f, 427.443634f);
    pathB.cubicTo(842.999634f, 427.574402f, 843.82019f, 427.513519f, 844.354309f, 427.216034f);
    pathB.cubicTo(846.956787f, 425.765503f, 848.689819f, 423.588257f, 848.58606f, 423.483429f);
    pathB.cubicTo(848.58606f, 423.483429f, 846.877991f, 423.327698f, 845.971558f, 422.807587f);
    pathB.cubicTo(845.253784f, 422.284485f, 844.892395f, 422.022949f, 844.171631f, 421.502838f);
    pathB.cubicTo(843.361023f, 420.915833f, 842.907837f, 420.308899f, 842.907837f, 419.350525f);
    pathB.lineTo(842.907837f, 399.445709f);
    pathB.cubicTo(842.907837f, 398.053101f, 843.272217f, 397.417175f, 843.812256f, 397.518005f);
    pathB.cubicTo(844.170654f, 397.583893f, 844.711731f, 398.122986f, 845.432495f, 398.782837f);
    pathB.cubicTo(846.116333f, 399.402771f, 846.459717f, 399.709259f, 847.14856f, 400.3302f);
    pathB.cubicTo(844.986206f, 402.099152f, 843.988892f, 403.926025f, 843.988892f, 405.932556f);
    pathB.cubicTo(843.988892f, 410.209229f, 848.272583f, 410.951935f, 849.576355f, 408.394348f);
    pathB.cubicTo(849.871826f, 407.816345f, 850.421875f, 406.214081f, 850.387939f, 406.196106f);
    pathB.cubicTo(850.387939f, 406.196106f, 849.305786f, 406.771118f, 848.495239f, 406.615387f);
    pathB.cubicTo(846.96582f, 406.316895f, 846.153198f, 405.46637f, 846.153198f, 403.89505f);
    pathB.cubicTo(846.153198f, 401.796661f, 848.50116f, 399.09729f, 852.279663f, 396.270142f);
    pathB.cubicTo(851.014893f, 395.315796f, 847.723511f, 391.546265f, 846.875f, 391.546265f);
    pathB.cubicTo(846.330933f, 391.546265f, 843.988892f, 394.403351f, 843.273193f, 394.972382f);
    pathB.cubicTo(840.889282f, 392.886963f, 839.700317f, 391.850739f, 837.312378f, 389.786285f);
    pathB.cubicTo(835.257935f, 391.589203f, 834.225708f, 392.491638f, 832.164246f, 394.307526f);
    pathB.moveTo(818.860107f, 392.707275f);
    pathB.cubicTo(819.857361f, 393.382111f, 822.302124f, 395.764038f, 824.387573f, 397.051819f);
    pathB.cubicTo(822.57666f, 398.249756f, 820.582092f, 399.687286f, 818.860107f, 400.827332f);
    pathB.lineTo(818.860107f, 392.707275f);
    pathB.close();
    pathB.moveTo(810.69812f, 391.096039f);
    pathB.cubicTo(810.69812f, 391.096039f, 812.786499f, 394.093903f, 812.786499f, 394.965393f);
    pathB.lineTo(812.786499f, 415.743713f);
    pathB.cubicTo(812.786499f, 417.753265f, 811.881042f, 418.497986f, 810.974609f, 419.769806f);
    pathB.cubicTo(813.948486f, 421.160431f, 815.437988f, 421.864197f, 818.404846f, 423.283783f);
    pathB.cubicTo(819.948181f, 423.95462f, 822.417969f, 424.592529f, 823.937317f, 423.782928f);
    pathB.cubicTo(827.905518f, 421.663544f, 831.53125f, 417.600525f, 832.255005f, 415.191681f);
    pathB.cubicTo(833.882263f, 409.877808f, 823.095825f, 411.495026f, 823.119751f, 411.518982f);
    pathB.cubicTo(823.119751f, 411.518982f, 832.000488f, 411.874359f, 830.537964f, 416.29776f);
    pathB.cubicTo(829.888123f, 418.253418f, 827.278564f, 420.292908f, 825.385864f, 419.55719f);
    pathB.cubicTo(821.14209f, 417.915985f, 818.861023f, 417.414856f, 818.861023f, 414.970032f);
    pathB.lineTo(818.861023f, 403.096436f);
    pathB.cubicTo(822.126404f, 399.132233f, 831.289673f, 395.897797f, 831.356567f, 395.657227f);
    pathB.cubicTo(831.356567f, 395.657227f, 823.022888f, 387.594055f, 821.763062f, 387.476257f);
    pathB.cubicTo(821.755066f, 387.47525f, 821.746094f, 387.47525f, 821.737061f, 387.47525f);
    pathB.cubicTo(820.793701f, 387.47525f, 810.72406f, 390.967255f, 810.69812f, 391.096039f);
    pathB.moveTo(624.254211f, 390.498077f);
    pathB.cubicTo(625.252502f, 390.893402f, 627.708252f, 392.592468f, 629.796692f, 393.307251f);
    pathB.cubicTo(627.978821f, 395.006317f, 625.980225f, 397.000916f, 624.254211f, 398.618134f);
    pathB.lineTo(624.254211f, 390.498077f);
    pathB.close();
    pathB.moveTo(627.160217f, 384.460449f);
    pathB.cubicTo(626.286743f, 384.51535f, 616.076233f, 390.993225f, 616.086243f, 391.141968f);
    pathB.cubicTo(616.086243f, 391.141968f, 618.173645f, 393.561798f, 618.173645f, 394.437317f);
    pathB.lineTo(618.173645f, 415.216614f);
    pathB.cubicTo(618.173645f, 417.222168f, 617.265198f, 418.219482f, 616.355774f, 419.742859f);
    pathB.cubicTo(619.331665f, 420.307892f, 620.824097f, 420.599396f, 623.802979f, 421.198364f);
    pathB.cubicTo(625.346313f, 421.437958f, 627.818115f, 421.39801f, 629.342468f, 420.166138f);
    pathB.cubicTo(633.340576f, 416.939667f, 636.982361f, 411.871368f, 637.714111f, 409.263855f);
    pathB.cubicTo(639.348267f, 403.500732f, 628.508911f, 408.111816f, 628.52887f, 408.126801f);
    pathB.cubicTo(628.52887f, 408.126801f, 637.468506f, 405.998444f, 635.985046f, 410.844147f);
    pathB.cubicTo(635.332153f, 412.984467f, 632.705688f, 415.748718f, 630.801941f, 415.541077f);
    pathB.cubicTo(626.537292f, 415.072876f, 624.257202f, 415.202667f, 624.257202f, 412.755859f);
    pathB.cubicTo(624.257202f, 408.007019f, 624.255188f, 405.636078f, 624.255188f, 400.884247f);
    pathB.cubicTo(627.525574f, 396.016602f, 636.801636f, 390.283447f, 636.801636f, 389.97995f);
    pathB.cubicTo(636.801636f, 389.97995f, 628.360168f, 384.458435f, 627.18219f, 384.458435f);
    pathB.cubicTo(627.174194f, 384.460449f, 627.167236f, 384.460449f, 627.160217f, 384.460449f);
    pathB.moveTo(796.530396f, 416.438538f);
    pathB.cubicTo(795.892517f, 416.365662f, 794.527832f, 415.589996f, 792.348572f, 414.036652f);
    pathB.lineTo(792.348572f, 391.425476f);
    pathB.cubicTo(792.348572f, 390.465118f, 792.530273f, 390.047852f, 792.89563f, 390.088776f);
    pathB.cubicTo(793.075317f, 390.109741f, 793.3479f, 390.317383f, 793.804077f, 390.629852f);
    pathB.cubicTo(795.113831f, 391.585205f, 795.768738f, 392.059387f, 797.077515f, 393.018738f);
    pathB.cubicTo(797.983948f, 393.648651f, 798.348267f, 394.219666f, 798.348267f, 394.742767f);
    pathB.lineTo(798.348267f, 413.253998f);
    pathB.cubicTo(798.348267f, 415.391327f, 797.783264f, 416.451508f, 796.728088f, 416.451508f);
    pathB.cubicTo(796.664185f, 416.4505f, 796.598267f, 416.446533f, 796.530396f, 416.438538f);
    pathB.moveTo(795.165771f, 383.714722f);
    pathB.cubicTo(794.022705f, 383.851471f, 783.959961f, 388.652252f, 783.880127f, 388.873871f);
    pathB.cubicTo(783.880127f, 388.873871f, 785.054077f, 389.871155f, 785.522339f, 390.606873f);
    pathB.cubicTo(786.000488f, 391.361603f, 786.246094f, 391.9935f, 786.246094f, 392.427765f);
    pathB.lineTo(786.246094f, 411.987183f);
    pathB.cubicTo(786.246094f, 413.733185f, 784.160645f, 416.428558f, 784.246521f, 416.759979f);
    pathB.cubicTo(784.258484f, 416.79892f, 785.432495f, 417.14032f, 785.793823f, 417.350952f);
    pathB.cubicTo(786.739258f, 417.937958f, 787.213379f, 418.228455f, 788.161804f, 418.821442f);
    pathB.cubicTo(789.342773f, 419.554199f, 790.619568f, 419.956482f, 791.892395f, 420.098236f);
    pathB.cubicTo(794.533813f, 420.390747f, 796.717102f, 419.337555f, 798.349304f, 416.999573f);
    pathB.lineTo(798.349304f, 425.212463f);
    pathB.cubicTo(797.94696f, 425.47702f, 797.750305f, 425.609772f, 797.356018f, 425.874329f);
    pathB.cubicTo(795.259583f, 423.619202f, 792.806824f, 422.286499f, 789.985657f, 421.984009f);
    pathB.cubicTo(785.157959f, 421.463898f, 780.409119f, 428.344086f, 780.423096f, 428.346069f);
    pathB.cubicTo(780.423096f, 428.346069f, 783.340088f, 424.960907f, 785.889709f, 425.218445f);
    pathB.cubicTo(789.25592f, 425.565857f, 793.166199f, 430.745972f, 793.805115f, 430.790894f);
    pathB.cubicTo(793.940857f, 430.798889f, 795.918457f, 429.091797f, 798.454102f, 427.383728f);
    pathB.cubicTo(801.049683f, 425.635742f, 804.230225f, 423.886749f, 806.619141f, 423.980591f);
    pathB.cubicTo(805.621826f, 423.586243f, 805.048828f, 423.074127f, 804.804199f, 422.609924f);
    pathB.cubicTo(804.616577f, 422.25354f, 804.616577f, 421.539764f, 804.616577f, 420.31488f);
    pathB.cubicTo(804.623535f, 411.732605f, 804.623535f, 403.147339f, 804.623535f, 394.562073f);
    pathB.cubicTo(804.623535f, 392.464691f, 805.970215f, 391.000183f, 805.984192f, 390.896362f);
    pathB.cubicTo(805.984192f, 390.896362f, 796.785034f, 383.7117f, 795.219666f, 383.7117f);
    pathB.cubicTo(795.19873f, 383.712708f, 795.181763f, 383.712708f, 795.165771f, 383.714722f);
    pathB.moveTo(648.092285f, 387.883545f);
    pathB.cubicTo(649.095581f, 388.312805f, 651.55835f, 390.099762f, 653.655701f, 390.884399f);
    pathB.cubicTo(651.831848f, 392.522583f, 649.82428f, 394.447296f, 648.092285f, 396.003601f);
    pathB.lineTo(648.092285f, 387.883545f);
    pathB.close();
    pathB.moveTo(651.009277f, 381.943756f);
    pathB.cubicTo(650.147766f, 381.983704f, 639.893372f, 388.105164f, 639.899353f, 388.254913f);
    pathB.cubicTo(639.899353f, 388.254913f, 641.987793f, 390.744659f, 641.987793f, 391.617157f);
    pathB.lineTo(641.987793f, 412.399475f);
    pathB.cubicTo(641.987793f, 414.409027f, 641.082336f, 415.369354f, 640.169861f, 416.864807f);
    pathB.cubicTo(643.155762f, 417.53064f, 644.650208f, 417.87207f, 647.638062f, 418.573853f);
    pathB.cubicTo(649.188416f, 418.865356f, 651.666138f, 418.908295f, 653.19751f, 417.725311f);
    pathB.cubicTo(657.204651f, 414.633636f, 660.859375f, 409.690125f, 661.590088f, 407.106567f);
    pathB.cubicTo(663.231262f, 401.397339f, 652.356934f, 405.644073f, 652.375916f, 405.663025f);
    pathB.cubicTo(652.375916f, 405.663025f, 661.338562f, 403.835175f, 659.857056f, 408.632935f);
    pathB.cubicTo(659.199219f, 410.748291f, 656.568726f, 413.424713f, 654.656982f, 413.151184f);
    pathB.cubicTo(650.381348f, 412.536224f, 648.092285f, 412.591125f, 648.092285f, 410.146332f);
    pathB.lineTo(648.092285f, 398.270721f);
    pathB.cubicTo(651.374634f, 393.5159f, 660.66571f, 388.09021f, 660.674683f, 387.791718f);
    pathB.cubicTo(660.674683f, 387.791718f, 652.188232f, 381.941772f, 651.022278f, 381.942749f);
    pathB.cubicTo(651.01825f, 381.942749f, 651.013245f, 381.942749f, 651.009277f, 381.943756f);
    pathB.moveTo(761.636353f, 385.965851f);
    pathB.cubicTo(761.927856f, 386.056702f, 762.071594f, 386.098633f, 762.363098f, 386.189453f);
    pathB.cubicTo(763.570007f, 386.938171f, 764.175964f, 387.311554f, 765.376892f, 388.066254f);
    pathB.cubicTo(766.019775f, 388.546417f, 766.384155f, 389.184326f, 766.384155f, 390.147675f);
    pathB.lineTo(766.384155f, 410.924011f);
    pathB.cubicTo(766.384155f, 412.057037f, 765.836121f, 413.410736f, 764.559326f, 414.979034f);
    pathB.cubicTo(765.911987f, 415.738739f, 766.579834f, 416.12207f, 767.934509f, 416.887756f);
    pathB.cubicTo(769.029602f, 417.495728f, 770.944336f, 418.000854f, 771.85675f, 418.075714f);
    pathB.cubicTo(772.58551f, 418.134613f, 773.413086f, 417.987854f, 773.950195f, 417.638458f);
    pathB.cubicTo(776.583618f, 415.917419f, 778.332642f, 413.564453f, 778.237793f, 413.473633f);
    pathB.cubicTo(778.237793f, 413.473633f, 776.507812f, 413.497559f, 775.596313f, 413.066315f);
    pathB.cubicTo(774.866577f, 412.61908f, 774.497253f, 412.39447f, 773.771484f, 411.951233f);
    pathB.cubicTo(772.947876f, 411.444092f, 772.493652f, 410.877075f, 772.493652f, 409.919708f);
    pathB.lineTo(772.493652f, 390.013885f);
    pathB.cubicTo(772.493652f, 388.618286f, 772.860046f, 387.949432f, 773.407104f, 387.995361f);
    pathB.cubicTo(773.771484f, 388.026306f, 774.318542f, 388.509491f, 775.049316f, 389.09848f);
    pathB.cubicTo(775.742065f, 389.646515f, 776.088501f, 389.923065f, 776.77533f, 390.470123f);
    pathB.cubicTo(774.590088f, 392.45871f, 773.589783f, 394.385376f, 773.589783f, 396.395935f);
    pathB.cubicTo(773.589783f, 400.673584f, 777.907349f, 401.008026f, 779.237122f, 398.292694f);
    pathB.cubicTo(779.539551f, 397.684723f, 780.089661f, 396.027557f, 780.058716f, 396.01358f);
    pathB.cubicTo(780.058716f, 396.01358f, 778.970581f, 396.694427f, 778.149963f, 396.618561f);
    pathB.cubicTo(776.598633f, 396.4758f, 775.775024f, 395.709106f, 775.775024f, 394.13681f);
    pathB.cubicTo(775.775024f, 392.042419f, 778.149963f, 389.103455f, 781.973389f, 385.892975f);
    pathB.cubicTo(780.697571f, 385.06839f, 777.326416f, 381.676208f, 776.506775f, 381.719147f);
    pathB.cubicTo(775.908813f, 381.747101f, 773.588806f, 384.868744f, 772.860046f, 385.506622f);
    pathB.cubicTo(770.451172f, 383.664795f, 769.248291f, 382.749359f, 766.843384f, 380.929504f);
    pathB.cubicTo(764.758972f, 382.934052f, 763.716736f, 383.940338f, 761.636353f, 385.965851f);
    pathB.moveTo(672.996521f, 379.821411f);
    pathB.cubicTo(672.123047f, 379.891266f, 669.7052f, 382.898132f, 668.887573f, 383.64682f);
    pathB.cubicTo(665.239868f, 386.999084f, 663.41095f, 390.213562f, 663.41095f, 393.356171f);
    pathB.cubicTo(663.41095f, 395.715118f, 664.439209f, 397.642792f, 666.785156f, 399.150208f);
    pathB.cubicTo(669.702148f, 401.02002f, 672.547302f, 402.439575f, 674.545837f, 403.655487f);
    pathB.cubicTo(676.261902f, 404.697693f, 677.105469f, 406.231049f, 677.105469f, 407.625671f);
    pathB.cubicTo(677.105469f, 408.671875f, 676.651245f, 409.777954f, 675.825684f, 410.7453f);
    pathB.cubicTo(675.12384f, 411.569885f, 674.538879f, 412.145905f, 673.997803f, 412.417419f);
    pathB.cubicTo(673.38385f, 412.724915f, 672.080078f, 411.958221f, 670.166382f, 410.198242f);
    pathB.cubicTo(668.113892f, 408.319458f, 667.062683f, 406.55249f, 667.062683f, 404.808502f);
    pathB.cubicTo(667.062683f, 404.020844f, 667.701599f, 402.580322f, 667.701599f, 402.580322f);
    pathB.cubicTo(667.701599f, 402.580322f, 661.773804f, 409.542358f, 661.951477f, 410.7453f);
    pathB.cubicTo(662.13916f, 412.037079f, 663.368042f, 413.524536f, 665.60321f, 415.469208f);
    pathB.cubicTo(667.791443f, 417.368927f, 669.261963f, 418.074738f, 669.983704f, 417.630493f);
    pathB.cubicTo(672.412537f, 416.138062f, 675.369446f, 413.822021f, 678.385254f, 410.790222f);
    pathB.cubicTo(680.485657f, 408.677856f, 681.587769f, 406.446686f, 681.587769f, 403.917023f);
    pathB.cubicTo(681.587769f, 400.859283f, 680.007446f, 398.490356f, 676.923767f, 396.806244f);
    pathB.cubicTo(673.540588f, 394.957428f, 671.257507f, 393.71756f, 670.351074f, 393.075653f);
    pathB.cubicTo(668.434326f, 391.71698f, 667.518921f, 390.193604f, 667.518921f, 388.88385f);
    pathB.cubicTo(667.518921f, 387.837646f, 668.101929f, 386.934204f, 669.25592f, 386.156525f);
    pathB.cubicTo(669.796997f, 385.788147f, 671.085815f, 386.257355f, 672.997498f, 387.592072f);
    pathB.cubicTo(674.966125f, 388.968689f, 676.104187f, 389.951019f, 676.284851f, 390.465118f);
    pathB.cubicTo(678.186584f, 388.130127f, 679.136963f, 386.966125f, 681.035706f, 384.646118f);
    pathB.cubicTo(678.244507f, 383.133728f, 674.247375f, 379.819397f, 673.044434f, 379.819397f);
    pathB.cubicTo(673.027466f, 379.819397f, 673.011475f, 379.820404f, 672.996521f, 379.821411f);
    pathB.moveTo(732.95459f, 384.60318f);
    pathB.cubicTo(733.246094f, 384.680054f, 733.391846f, 384.720001f, 733.689331f, 384.794861f);
    pathB.cubicTo(735.072937f, 385.500641f, 735.769714f, 385.856049f, 737.162354f, 386.563812f);
    pathB.cubicTo(737.891113f, 386.938171f, 738.164612f, 387.642975f, 738.164612f, 388.6073f);
    pathB.lineTo(738.164612f, 408.510132f);
    pathB.cubicTo(738.164612f, 410.257141f, 737.709412f, 411.893341f, 736.064209f, 413.416718f);
    pathB.cubicTo(737.635498f, 414.235321f, 738.419189f, 414.651611f, 739.991455f, 415.475189f);
    pathB.cubicTo(740.997742f, 416.034241f, 742.186707f, 416.344696f, 743.098145f, 416.379639f);
    pathB.cubicTo(743.830872f, 416.410583f, 744.476807f, 416.175964f, 745.019836f, 415.851532f);
    pathB.cubicTo(746.476318f, 414.977051f, 748.58075f, 413.571442f, 749.225647f, 413.079285f);
    pathB.cubicTo(751.012573f, 414.253296f, 751.907043f, 414.845276f, 753.69696f, 416.028229f);
    pathB.cubicTo(754.703247f, 416.610229f, 755.706543f, 416.84082f, 756.528076f, 416.892761f);
    pathB.cubicTo(757.259827f, 416.93866f, 757.996582f, 416.807892f, 758.537659f, 416.494446f);
    pathB.cubicTo(760.814758f, 415.174713f, 762.185425f, 413.509552f, 762.552734f, 412.830719f);
    pathB.cubicTo(761.637329f, 412.681976f, 759.633789f, 411.58786f, 759.263428f, 411.387207f);
    pathB.cubicTo(758.607544f, 410.994873f, 758.279114f, 410.803223f, 757.621216f, 410.413879f);
    pathB.cubicTo(756.983276f, 410.020538f, 756.616943f, 409.301788f, 756.616943f, 408.343445f);
    pathB.lineTo(756.616943f, 388.351746f);
    pathB.cubicTo(756.616943f, 387.387421f, 757.164978f, 386.548859f, 758.627502f, 385.067383f);
    pathB.cubicTo(755.523804f, 383.05484f, 753.97052f, 382.057556f, 750.862854f, 380.078949f);
    pathB.cubicTo(749.001038f, 382.112457f, 748.069641f, 383.130707f, 746.207825f, 385.174194f);
    pathB.cubicTo(746.501343f, 385.292999f, 746.647095f, 385.353912f, 746.939575f, 385.472687f);
    pathB.cubicTo(747.996765f, 386.183472f, 748.525879f, 386.538879f, 749.587036f, 387.257629f);
    pathB.cubicTo(750.224915f, 387.724823f, 750.498474f, 388.351746f, 750.498474f, 389.223267f);
    pathB.lineTo(750.498474f, 407.822327f);
    pathB.cubicTo(750.498474f, 408.694824f, 750.339722f, 409.955658f, 749.951416f, 410.847137f);
    pathB.cubicTo(749.550049f, 411.761566f, 749.039978f, 411.585876f, 748.487915f, 411.560913f);
    pathB.cubicTo(747.393799f, 411.503998f, 746.385498f, 410.53067f, 745.473083f, 410.022552f);
    pathB.cubicTo(744.760254f, 409.627228f, 744.380981f, 409.013275f, 744.380981f, 407.965088f);
    pathB.lineTo(744.380981f, 386.840363f);
    pathB.cubicTo(744.380981f, 385.791138f, 744.833191f, 384.763916f, 745.657776f, 383.839508f);
    pathB.cubicTo(742.656921f, 382.101501f, 741.161499f, 381.234985f, 738.162659f, 379.525909f);
    pathB.cubicTo(736.083191f, 381.548431f, 735.039978f, 382.562683f, 732.95459f, 384.60318f);
    pathB.moveTo(692.546936f, 385.171204f);
    pathB.cubicTo(693.552246f, 385.667358f, 696.018005f, 387.607025f, 698.122375f, 388.521454f);
    pathB.cubicTo(696.293518f, 390.043854f, 694.281982f, 391.844757f, 692.546936f, 393.294281f);
    pathB.lineTo(692.546936f, 385.171204f);
    pathB.close();
    pathB.moveTo(695.4729f, 379.417084f);
    pathB.cubicTo(694.635376f, 379.426086f, 684.32605f, 384.880707f, 684.322083f, 385.025452f);
    pathB.cubicTo(684.322083f, 385.025452f, 686.422485f, 387.645966f, 686.422485f, 388.521454f);
    pathB.lineTo(686.422485f, 409.300781f);
    pathB.cubicTo(686.422485f, 411.312347f, 685.51001f, 412.21579f, 684.595581f, 413.65033f);
    pathB.cubicTo(687.592468f, 414.504852f, 689.089905f, 414.945099f, 692.088745f, 415.833557f);
    pathB.cubicTo(693.645081f, 416.221893f, 696.128784f, 416.420563f, 697.667114f, 415.334412f);
    pathB.cubicTo(701.67926f, 412.494293f, 705.344971f, 407.783386f, 706.077698f, 405.240753f);
    pathB.cubicTo(707.721924f, 399.638367f, 696.822632f, 403.198273f, 696.845581f, 403.216248f);
    pathB.cubicTo(696.845581f, 403.216248f, 705.825134f, 401.960388f, 704.337708f, 406.658325f);
    pathB.cubicTo(703.683838f, 408.733765f, 701.044373f, 411.241455f, 699.129639f, 410.847137f);
    pathB.cubicTo(694.843018f, 409.968628f, 692.545959f, 409.876801f, 692.545959f, 407.432983f);
    pathB.lineTo(692.545959f, 395.563354f);
    pathB.cubicTo(695.838318f, 391.012177f, 705.134338f, 386.160522f, 705.162292f, 385.873993f);
    pathB.cubicTo(705.162292f, 385.873993f, 696.635925f, 379.416107f, 695.473938f, 379.417084f);
    pathB.cubicTo(695.474915f, 379.417084f, 695.473938f, 379.417084f, 695.4729f, 379.417084f);
    pathB.moveTo(570.463562f, 420.81601f);
    pathB.lineTo(570.463562f, 402.922729f);
    pathB.cubicTo(571.039551f, 402.800934f, 571.327087f, 402.743042f, 571.901123f, 402.625244f);
    pathB.lineTo(571.901123f, 423.142029f);
    pathB.cubicTo(570.911804f, 422.823578f, 570.463562f, 422.123779f, 570.463562f, 420.81601f);
    pathB.moveTo(570.463562f, 384.062134f);
    pathB.cubicTo(571.039551f, 384.149963f, 571.327087f, 384.198883f, 571.901123f, 384.290741f);
    pathB.lineTo(571.901123f, 401.580048f);
    pathB.cubicTo(571.327087f, 401.695862f, 571.039551f, 401.756744f, 570.463562f, 401.874542f);
    pathB.lineTo(570.463562f, 384.062134f);
    pathB.close();
    pathB.moveTo(573.880676f, 376.556f);
    pathB.cubicTo(572.483093f, 376.996246f, 561.476013f, 385.624451f, 561.482971f, 385.70929f);
    pathB.cubicTo(561.482971f, 385.70929f, 563.637268f, 388.554413f, 563.637268f, 389.688446f);
    pathB.lineTo(563.637268f, 398.423462f);
    pathB.cubicTo(556.411682f, 399.838043f, 555.429382f, 404.307373f, 555.418396f, 405.679993f);
    pathB.lineTo(555.418396f, 405.724915f);
    pathB.cubicTo(555.42041f, 405.94455f, 555.448364f, 406.073334f, 555.477295f, 406.083313f);
    pathB.cubicTo(555.477295f, 406.083313f, 558.070862f, 404.250458f, 563.637268f, 403.222229f);
    pathB.lineTo(563.637268f, 404.797516f);
    pathB.cubicTo(556.993713f, 406.233063f, 555.191772f, 412.494293f, 555.569153f, 412.614105f);
    pathB.cubicTo(555.569153f, 412.614105f, 561.572815f, 410.21521f, 563.637268f, 409.598267f);
    pathB.lineTo(563.637268f, 424.00354f);
    pathB.cubicTo(563.637268f, 426.357483f, 563.36676f, 427.901855f, 562.291565f, 429.70874f);
    pathB.cubicTo(565.448181f, 430.067139f, 567.028442f, 430.256805f, 570.192017f, 430.653137f);
    pathB.cubicTo(571.99292f, 430.893707f, 574.782166f, 430.669098f, 576.403381f, 429.136719f);
    pathB.cubicTo(580.960571f, 424.828125f, 586.135681f, 419.346527f, 586.135681f, 416.115082f);
    pathB.lineTo(586.135681f, 406.511566f);
    pathB.cubicTo(586.135681f, 405.377533f, 586.047791f, 404.608856f, 586.678711f, 403.271149f);
    pathB.cubicTo(584.151062f, 404.98819f, 582.888245f, 405.851715f, 580.362549f, 407.587738f);
    pathB.cubicTo(579.281433f, 408.320465f, 579.192566f, 409.2948f, 579.192566f, 410.955933f);
    pathB.lineTo(579.192566f, 421.869202f);
    pathB.cubicTo(579.192566f, 423.180969f, 577.746033f, 423.273804f, 577.392639f, 423.266815f);
    pathB.cubicTo(575.636658f, 423.228882f, 574.153259f, 423.295776f, 573.071106f, 423.077148f);
    pathB.lineTo(573.071106f, 384.663086f);
    pathB.cubicTo(575.230408f, 385.379852f, 576.309509f, 385.742249f, 578.473816f, 386.473999f);
    pathB.cubicTo(579.373291f, 386.996094f, 579.553955f, 387.490234f, 579.553955f, 388.013336f);
    pathB.cubicTo(581.861023f, 384.848785f, 583.015991f, 383.267487f, 585.325073f, 380.114899f);
    pathB.cubicTo(581.680298f, 379.229431f, 575.865295f, 376.520081f, 574.157227f, 376.521057f);
    pathB.cubicTo(574.047424f, 376.522064f, 573.955566f, 376.533051f, 573.880676f, 376.556f);
    pathB.moveTo(593.447083f, 375.096527f);
    pathB.cubicTo(592.363953f, 375.804291f, 591.821899f, 376.772644f, 591.821899f, 377.908691f);
    pathB.lineTo(591.821899f, 419.46933f);
    pathB.cubicTo(591.821899f, 420.517517f, 591.187012f, 422.018951f, 589.921143f, 423.991577f);
    pathB.cubicTo(591.2948f, 424.412842f, 591.982605f, 424.622467f, 593.354248f, 425.050751f);
    pathB.cubicTo(594.53125f, 425.462036f, 595.525513f, 425.555878f, 596.427979f, 425.404144f);
    pathB.cubicTo(597.150757f, 425.279358f, 597.785645f, 424.914978f, 598.326721f, 424.475739f);
    pathB.cubicTo(600.935242f, 422.385315f, 602.846985f, 419.809753f, 602.759094f, 419.749847f);
    pathB.cubicTo(602.759094f, 419.749847f, 601.582153f, 419.935516f, 600.59082f, 419.831696f);
    pathB.cubicTo(600.0448f, 419.74585f, 599.774231f, 419.700928f, 599.233154f, 419.615082f);
    pathB.cubicTo(598.416565f, 419.484314f, 597.965332f, 418.860382f, 597.965332f, 417.988861f);
    pathB.lineTo(597.965332f, 396.857147f);
    pathB.cubicTo(597.965332f, 395.376678f, 598.326721f, 394.617004f, 598.867798f, 394.528137f);
    pathB.cubicTo(599.232178f, 394.466248f, 599.773254f, 394.731812f, 600.59082f, 395.124115f);
    pathB.cubicTo(601.601074f, 395.589325f, 602.111206f, 395.819946f, 603.123474f, 396.288116f);
    pathB.cubicTo(603.93811f, 396.686432f, 603.93512f, 397.38324f, 603.93512f, 398.169891f);
    pathB.cubicTo(603.93512f, 405.971497f, 603.93512f, 413.768127f, 603.93811f, 421.569702f);
    pathB.cubicTo(603.93811f, 425.325256f, 601.109924f, 430.634155f, 601.133911f, 430.656128f);
    pathB.cubicTo(601.133911f, 430.656128f, 605.184937f, 427.222015f, 607.017822f, 424.414825f);
    pathB.cubicTo(609.118164f, 421.201355f, 610.280212f, 417.987854f, 610.280212f, 415.109802f);
    pathB.lineTo(610.280212f, 394.593048f);
    pathB.cubicTo(610.280212f, 393.890228f, 610.823242f, 393.112579f, 611.728699f, 392.020447f);
    pathB.cubicTo(608.827698f, 390.960266f, 604.000977f, 387.703857f, 602.759094f, 387.967407f);
    pathB.cubicTo(602.120239f, 388.104187f, 599.957947f, 391.29071f, 597.965332f, 393.27829f);
    pathB.lineTo(597.965332f, 374.422668f);
    pathB.cubicTo(597.965332f, 373.461334f, 598.326721f, 372.440063f, 598.867798f, 371.567566f);
    pathB.cubicTo(596.701538f, 372.96817f, 595.616394f, 373.677948f, 593.447083f, 375.096527f);
    pathB.moveTo(718.054138f, 409.318756f);
    pathB.cubicTo(717.461182f, 408.789673f, 716.867188f, 408.178711f, 716.867188f, 407.218353f);
    pathB.lineTo(716.867188f, 387.053986f);
    pathB.cubicTo(716.867188f, 385.305969f, 717.323425f, 385.566528f, 718.328674f, 386.013763f);
    pathB.cubicTo(719.645386f, 386.859314f, 720.307251f, 387.284576f, 721.622009f, 388.135132f);
    pathB.cubicTo(722.266907f, 388.4935f, 722.903809f, 388.934753f, 722.903809f, 389.721405f);
    pathB.lineTo(722.903809f, 407.794373f);
    pathB.cubicTo(722.903809f, 408.66687f, 722.746094f, 410.490753f, 722.259888f, 410.758301f);
    pathB.cubicTo(722.125122f, 410.83017f, 721.950439f, 410.862122f, 721.746826f, 410.862122f);
    pathB.cubicTo(720.655701f, 410.864105f, 718.747925f, 409.936707f, 718.054138f, 409.318756f);
    pathB.moveTo(711.928711f, 364.782227f);
    pathB.cubicTo(711.195923f, 365.134613f, 710.648865f, 365.834412f, 710.648865f, 366.794769f);
    pathB.lineTo(710.648865f, 407.392059f);
    pathB.cubicTo(710.648865f, 409.397614f, 708.519531f, 411.37323f, 708.547485f, 411.684692f);
    pathB.cubicTo(708.550476f, 411.745605f, 711.838867f, 413.067322f, 713.849365f, 414.368073f);
    pathB.cubicTo(717.766663f, 416.906738f, 720.162537f, 415.845551f, 722.354797f, 414.073608f);
    pathB.cubicTo(724.059875f, 412.69397f, 726.55957f, 410.981903f, 730.675537f, 410.124359f);
    pathB.cubicTo(729.75708f, 409.143066f, 729.213013f, 407.993042f, 729.213013f, 406.683289f);
    pathB.cubicTo(729.213013f, 399.630402f, 729.209045f, 396.103455f, 729.209045f, 389.047546f);
    pathB.cubicTo(729.209045f, 387.648956f, 730.577698f, 385.292023f, 730.583679f, 385.149261f);
    pathB.cubicTo(730.583679f, 385.149261f, 720.888306f, 378.762207f, 719.609497f, 378.947906f);
    pathB.cubicTo(719.275085f, 378.996826f, 717.872498f, 381.118164f, 716.868225f, 381.896851f);
    pathB.lineTo(716.868225f, 365.046783f);
    pathB.cubicTo(716.868225f, 363.740021f, 716.960083f, 363.043213f, 717.597961f, 362);
    pathB.cubicTo(715.331848f, 363.104095f, 714.19873f, 363.657166f, 711.928711f, 364.782227f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpeverytechpro_blogspot_com100(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1074.29285f, 627.292786f);
    path.quadTo(1074.58582f, 627, 1075, 627);
    path.lineTo(1117, 627);
    path.quadTo(1124.04163f, 627, 1129.02246f, 631.9776f);
    path.quadTo(1134, 636.958374f, 1134, 644);
    path.lineTo(1134, 645);
    path.quadTo(1134, 652.041626f, 1129.02246f, 657.0224f);
    path.quadTo(1124.04163f, 662, 1117, 662);
    path.lineTo(1075, 662);
    path.quadTo(1074.58582f, 662, 1074.29285f, 661.707214f);
    path.quadTo(1074, 661.414185f, 1074, 661);
    path.lineTo(1074, 628);
    path.quadTo(1074, 627.585815f, 1074.29285f, 627.292786f);
    path.close();
    path.moveTo(1076, 629);
    path.lineTo(1117, 629);
    path.cubicTo(1125.2843f, 629, 1132, 635.715698f, 1132, 644);
    path.lineTo(1132, 645);
    path.cubicTo(1132, 653.284302f, 1125.2843f, 660, 1117, 660);
    path.lineTo(1076, 660);
    path.lineTo(1076, 629);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1074, 627);
    pathB.lineTo(1075, 628);
    pathB.lineTo(1116.5f, 644.5f);
    pathB.lineTo(1134, 627);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpflite_com41(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(301.464081f, 424);
    path.lineTo(296, 433.46405f);
    path.lineTo(296, 433.810822f);
    path.lineTo(303.25589f, 438);
    path.lineTo(304.729736f, 438);
    path.lineTo(311, 427.139557f);
    path.lineTo(311, 426.305237f);
    path.lineTo(307.007202f, 424);
    path.lineTo(301.464081f, 424);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(302.849854f, 421.599762f);
    pathB.lineTo(311.510101f, 426.599762f);
    pathB.lineTo(304.510101f, 438.724121f);
    pathB.lineTo(295.849854f, 433.724121f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpilkoora_com37(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(818, 157);
    path.cubicTo(818, 148.715729f, 824.715698f, 142, 833, 142);
    path.lineTo(909, 142);
    path.lineTo(909, 143);
    path.lineTo(833, 143);
    path.cubicTo(825.268005f, 143, 819, 149.268005f, 819, 157);
    path.lineTo(819, 926);
    path.lineTo(818, 926);
    path.lineTo(818, 157);
    path.close();
    path.moveTo(1184, 926);
    path.lineTo(1185, 926);
    path.lineTo(1185, 157);
    path.cubicTo(1185, 148.715729f, 1178.2843f, 142, 1170, 142);
    path.lineTo(1093, 142);
    path.lineTo(1093, 143);
    path.lineTo(1170, 143);
    path.cubicTo(1177.73193f, 143, 1184, 149.268005f, 1184, 157);
    path.lineTo(1184, 926);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1185, 142);
    pathB.lineTo(1001.5f, 325.5f);
    pathB.lineTo(1001.5f, 782.5f);
    pathB.lineTo(1185, 966);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpmm4everfriends_com43(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(540.74231f, 215.922546f);
    path.cubicTo(540.893127f, 215.391159f, 541.443909f, 215.090134f, 541.972473f, 215.250168f);
    path.lineTo(581.213318f, 227.131104f);
    path.cubicTo(581.741882f, 227.291153f, 582.048157f, 227.851654f, 581.897339f, 228.383041f);
    path.lineTo(576.708923f, 246.663925f);
    path.cubicTo(576.558167f, 247.195297f, 576.007324f, 247.496338f, 575.47876f, 247.336288f);
    path.lineTo(536.237915f, 235.455353f);
    path.cubicTo(535.709351f, 235.295319f, 535.403137f, 234.734802f, 535.553894f, 234.20343f);
    path.lineTo(540.74231f, 215.922546f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(541.015381f, 214.960388f);
    pathB.lineTo(582.17041f, 227.420883f);
    pathB.lineTo(576.435852f, 247.626068f);
    pathB.lineTo(535.280823f, 235.165573f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpmtrk_uz27(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(33, 787);
    path.lineTo(33, 412);
    path.lineTo(1233, 412);
    path.lineTo(1233, 787);
    path.quadTo(1233, 793.213196f, 1228.60803f, 797.607971f);
    path.quadTo(1224.21326f, 802, 1218, 802);
    path.lineTo(48, 802);
    path.quadTo(41.7867966f, 802, 37.3919983f, 797.607971f);
    path.quadTo(33, 793.213196f, 33, 787);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(33, 412);
    pathB.lineTo(1233, 412);
    pathB.lineTo(1233, 787);
    pathB.quadTo(1233, 793.213196f, 1228.60791f, 797.608032f);
    pathB.quadTo(1224.21313f, 802, 1218, 802);
    pathB.lineTo(48, 802);
    pathB.quadTo(41.7867432f, 802, 37.3919678f, 797.608032f);
    pathB.quadTo(33, 793.213196f, 33, 787);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpfrauen_magazin_com83(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(808, 886);
    path.cubicTo(805.581055f, 886, 803.563293f, 887.717773f, 803.100037f, 890);
    path.lineTo(1122.90002f, 890);
    path.cubicTo(1122.43677f, 887.717773f, 1120.41895f, 886, 1118, 886);
    path.lineTo(808, 886);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(808, 886);
    pathB.lineTo(1118, 886);
    pathB.cubicTo(1120.76147f, 886, 1123, 888.238586f, 1123, 891);
    pathB.lineTo(1123, 1521);
    pathB.cubicTo(1123, 1523.20911f, 1120.76147f, 1525, 1118, 1525);
    pathB.lineTo(808, 1525);
    pathB.cubicTo(805.238586f, 1525, 803, 1523.20911f, 803, 1521);
    pathB.lineTo(803, 891);
    pathB.cubicTo(803, 888.238586f, 805.238586f, 886, 808, 886);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpi_gino_com16(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(184, 734);
    path.quadTo(133.051727f, 734, 97.0258636f, 770.025879f);
    path.quadTo(61, 806.051758f, 61, 857);
    path.quadTo(61, 895.835083f, 81.9317017f, 926);
    path.lineTo(286.068298f, 926);
    path.quadTo(307, 895.835083f, 307, 857);
    path.quadTo(307, 806.051758f, 270.974121f, 770.025879f);
    path.quadTo(234.948273f, 734, 184, 734);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(185, 734);
    pathB.cubicTo(252.93103f, 734, 308, 789.06897f, 308, 857);
    pathB.cubicTo(308, 924.93103f, 252.93103f, 980, 185, 980);
    pathB.lineTo(184, 980);
    pathB.cubicTo(116.068977f, 980, 61, 924.93103f, 61, 857);
    pathB.cubicTo(61, 789.06897f, 116.068977f, 734, 184, 734);
    pathB.lineTo(185, 734);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skppchappy_com_au102(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(363, 493);
    path.cubicTo(360.790863f, 493, 359, 494.790863f, 359, 497);
    path.lineTo(359, 656);
    path.cubicTo(359, 658.209106f, 360.790863f, 660, 363, 660);
    path.lineTo(623.001709f, 660);
    path.cubicTo(624.657776f, 659.999023f, 626, 658.65625f, 626, 657);
    path.lineTo(626, 496);
    path.cubicTo(626, 494.343872f, 624.657959f, 493.00116f, 623.002075f, 493);
    path.lineTo(363, 493);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(362, 494);
    pathB.lineTo(623, 494);
    pathB.cubicTo(624.65686f, 494, 626, 494.895416f, 626, 496);
    pathB.lineTo(626, 657);
    pathB.cubicTo(626, 658.65686f, 624.65686f, 660, 623, 660);
    pathB.lineTo(362, 660);
    pathB.cubicTo(360.34314f, 660, 359, 658.65686f, 359, 657);
    pathB.lineTo(359, 496);
    pathB.cubicTo(359, 494.895416f, 360.34314f, 494, 362, 494);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsciality_com161(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(656, 728);
    path.cubicTo(653.790833f, 728, 652, 729.790833f, 652, 732);
    path.lineTo(652, 789);
    path.cubicTo(652, 791.209106f, 653.790833f, 793, 656, 793);
    path.lineTo(769.001282f, 793);
    path.cubicTo(770.657532f, 792.999268f, 772, 791.656433f, 772, 790);
    path.lineTo(772, 731);
    path.cubicTo(772, 729.34314f, 770.65686f, 728, 769, 728);
    path.lineTo(656, 728);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(655, 729);
    pathB.lineTo(769, 729);
    pathB.cubicTo(770.65686f, 729, 772, 729.895447f, 772, 731);
    pathB.lineTo(772, 790);
    pathB.cubicTo(772, 791.65686f, 770.65686f, 793, 769, 793);
    pathB.lineTo(655, 793);
    pathB.cubicTo(653.34314f, 793, 652, 791.65686f, 652, 790);
    pathB.lineTo(652, 731);
    pathB.cubicTo(652, 729.895447f, 653.34314f, 729, 655, 729);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsudoestenegocios_com186(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 495);
    path.lineTo(1.23685242e-14f, 293);
    path.lineTo(44, 293);
    path.quadTo(45.6568527f, 293, 46.8288002f, 294.171204f);
    path.quadTo(48, 295.34314f, 48, 297);
    path.lineTo(48, 491);
    path.quadTo(48, 492.65686f, 46.8288002f, 493.828796f);
    path.quadTo(45.6568527f, 495, 44, 495);
    path.lineTo(0, 495);
    path.close();
    path.moveTo(1, 294);
    path.lineTo(44, 294);
    path.cubicTo(45.6568565f, 294, 47, 295.34314f, 47, 297);
    path.lineTo(47, 491);
    path.cubicTo(47, 492.65686f, 45.6568565f, 494, 44, 494);
    path.lineTo(1, 494);
    path.lineTo(1, 294);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(48, 495);
    pathB.lineTo(24, 471);
    pathB.lineTo(24, 317);
    pathB.lineTo(48, 293);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpthesuburbanite_com213(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(863.439026f, 692);
    path.lineTo(863.283264f, 692);
    path.lineTo(802, 708.420837f);
    path.lineTo(802, 718.773621f);
    path.lineTo(866, 701.624817f);
    path.lineTo(866, 701.557922f);
    path.lineTo(863.439026f, 692);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(783.256775f, 713.443054f);
    pathB.lineTo(863.428589f, 691.96106f);
    pathB.lineTo(866.016724f, 701.620361f);
    pathB.lineTo(785.84491f, 723.102356f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skphostloco_com11(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(6.66133815e-16f, 648);
    path.lineTo(25.8522835f, 648);
    path.quadTo(27.5087376f, 647.999634f, 28.6807098f, 646.82843f);
    path.quadTo(29.8518829f, 645.656433f, 29.8522835f, 644);
    path.lineTo(29.8522835f, 467);
    path.quadTo(29.8518829f, 465.343536f, 28.6807098f, 464.17157f);
    path.quadTo(27.5087376f, 463.000397f, 25.8522835f, 463);
    path.lineTo(2.22044605e-16f, 463);
    path.lineTo(6.66133815e-16f, 648);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(0, 463);
    pathB.lineTo(30, 463);
    pathB.lineTo(30, 648);
    pathB.lineTo(0, 648);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsergeychunkevich_com8(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 926);
    path.lineTo(0, 0);
    path.lineTo(1265, 0);
    path.lineTo(1265, 926);
    path.lineTo(0, 926);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(37, 374);
    pathB.lineTo(37, 535);
    pathB.cubicTo(37, 536.65686f, 35.6568565f, 538, 34, 538);
    pathB.lineTo(1.02866934e-14f, 538);
    pathB.lineTo(6.12303177e-17f, 371);
    pathB.lineTo(34, 371);
    pathB.cubicTo(35.6568565f, 371, 37, 372.34314f, 37, 374);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skptracksflow_com9(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(16, 56);
    path.lineTo(32, 56);
    path.lineTo(32, 72);
    path.lineTo(16, 72);
    path.lineTo(16, 56);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kEvenOdd_FillType);
    pathB.moveTo(31.65625f, 70.0555649f);
    pathB.lineTo(31.65625f, 70.0554962f);
    pathB.lineTo(26.9727192f, 65.3615341f);
    pathB.cubicTo(27.6210003f, 64.4029694f, 28.0048752f, 63.2470932f, 28.0048752f, 62.0027809f);
    pathB.cubicTo(28.0048752f, 58.6875305f, 25.3199062f, 56, 22.0046558f, 56);
    pathB.cubicTo(18.6894073f, 56, 16.0031872f, 58.6875305f, 16.0031872f, 62.0027809f);
    pathB.cubicTo(16.0031872f, 65.3180008f, 18.6913433f, 68.0055618f, 22.0066261f, 68.0055618f);
    pathB.cubicTo(23.2509995f, 68.0055618f, 24.4072189f, 67.6187515f, 25.3657818f, 66.9704056f);
    pathB.lineTo(30.0599365f, 71.65625f);
    pathB.lineTo(30.0600014f, 71.65625f);
    pathB.cubicTo(30.2668133f, 71.875f, 30.5524693f, 71.9992828f, 30.868f, 71.9992828f);
    pathB.cubicTo(31.4994049f, 71.9992828f, 32.0014687f, 71.4909363f, 32.0014687f, 70.8595276f);
    pathB.cubicTo(32.0015335f, 70.5439072f, 31.875f, 70.2623444f, 31.65625f, 70.0555649f);
    pathB.close();
    pathB.moveTo(18.0054054f, 62.0027809f);
    pathB.cubicTo(18.0054054f, 59.7925949f, 19.7970943f, 58.0009079f, 22.0072823f, 58.0009079f);
    pathB.cubicTo(24.2174377f, 58.0009079f, 26.0091248f, 59.7925949f, 26.0091248f, 62.0027809f);
    pathB.cubicTo(26.0091248f, 64.2129364f, 24.2174377f, 66.0046234f, 22.0072803f, 66.0046234f);
    pathB.cubicTo(19.7970943f, 66.0045929f, 18.0054054f, 64.2129059f, 18.0054054f, 62.0027809f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpautobutler_dk29(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 926);
    path.lineTo(0, 0);
    path.lineTo(1265, 0);
    path.lineTo(1265, 926);
    path.lineTo(0, 926);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(21, 162);
    pathB.lineTo(21, 301);
    pathB.lineTo(8.57224448e-15f, 301);
    pathB.lineTo(6.12303177e-17f, 162);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skponlinecollege_org144(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(179, 407);
    path.cubicTo(177.34314f, 407, 176, 408.34314f, 176, 410);
    path.lineTo(176, 436);
    path.cubicTo(176, 437.65686f, 177.34314f, 439, 179, 439);
    path.lineTo(337.002289f, 439);
    path.cubicTo(338.105835f, 438.998779f, 339, 438.103821f, 339, 437);
    path.lineTo(339, 409);
    path.cubicTo(339, 407.896362f, 338.10611f, 407.001526f, 337.002838f, 407);
    path.lineTo(179, 407);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(179, 408);
    pathB.lineTo(337, 408);
    pathB.cubicTo(338.65686f, 408, 340, 408.895416f, 340, 410);
    pathB.lineTo(340, 436);
    pathB.cubicTo(340, 437.65686f, 338.65686f, 439, 337, 439);
    pathB.lineTo(179, 439);
    pathB.cubicTo(177.895432f, 439, 177, 437.65686f, 177, 436);
    pathB.lineTo(177, 410);
    pathB.cubicTo(177, 408.895416f, 177.895432f, 408, 179, 408);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpnational_com_au81(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(807, 817);
    path.quadTo(806.585876f, 817.000122f, 806.292908f, 817.292908f);
    path.quadTo(806.000122f, 817.585876f, 806, 818);
    path.lineTo(806, 881);
    path.lineTo(1111, 881);
    path.lineTo(1111, 818);
    path.quadTo(1110.99988f, 817.585876f, 1110.70715f, 817.292908f);
    path.quadTo(1110.41406f, 817.000122f, 1110, 817);
    path.lineTo(807, 817);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(807, 817);
    pathB.lineTo(1110, 817);
    pathB.cubicTo(1110.55225f, 817, 1111, 817.447693f, 1111, 818);
    pathB.lineTo(1111, 880);
    pathB.lineTo(806, 880);
    pathB.lineTo(806, 818);
    pathB.cubicTo(806, 817.447693f, 806.447693f, 817, 807, 817);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skprentacheat_com30(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(967, 263);
    path.quadTo(966.585876f, 263.000092f, 966.292908f, 263.292908f);
    path.quadTo(966.000122f, 263.585876f, 966, 264);
    path.lineTo(966, 301);
    path.lineTo(1214, 301);
    path.lineTo(1214, 264);
    path.quadTo(1213.99988f, 263.585876f, 1213.70715f, 263.292908f);
    path.quadTo(1213.41406f, 263.000092f, 1213, 263);
    path.lineTo(967, 263);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(967, 263);
    pathB.lineTo(1213, 263);
    pathB.cubicTo(1213.55225f, 263, 1214, 263.447723f, 1214, 264);
    pathB.lineTo(1214, 300);
    pathB.lineTo(966, 300);
    pathB.lineTo(966, 264);
    pathB.cubicTo(966, 263.447723f, 966.447693f, 263, 967, 263);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpbreakmystyle_com10(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(271.032867f, -5.32907052e-15f);
    path.lineTo(56.9671326f, -5.16253706e-15f);
    path.quadTo(52.7835083f, 3.69968891f, 48.7416f, 7.74160004f);
    path.quadTo(1, 55.4831848f, 1, 123);
    path.quadTo(1, 190.516815f, 48.7416f, 238.258392f);
    path.quadTo(96.4831848f, 286, 164, 286);
    path.quadTo(231.516815f, 286, 279.258392f, 238.258392f);
    path.quadTo(327, 190.516815f, 327, 123);
    path.quadTo(327, 55.4831848f, 279.258392f, 7.74160004f);
    path.quadTo(275.216431f, 3.69964004f, 271.032867f, -5.32907052e-15f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(327, 123);
    pathB.quadTo(327, 190.516815f, 279.258392f, 238.258392f);
    pathB.quadTo(231.516815f, 286, 164, 286);
    pathB.quadTo(96.4831848f, 286, 48.7416f, 238.258392f);
    pathB.quadTo(1, 190.516815f, 1, 123);
    pathB.quadTo(1, 55.4831848f, 48.7416f, 7.74160004f);
    pathB.quadTo(96.4831848f, -40, 164, -40);
    pathB.quadTo(231.516815f, -40, 279.258392f, 7.74160004f);
    pathB.quadTo(327, 55.4831848f, 327, 123);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpsd_graphic_net104(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(475.421448f, 836.985962f);
    path.lineTo(461.280975f, 841.990662f);
    path.cubicTo(466.80899f, 857.609802f, 458.62854f, 874.752991f, 443.009399f, 880.281006f);
    path.cubicTo(435.199829f, 883.044983f, 427.009247f, 882.381897f, 420.080048f, 879.075378f);
    path.lineTo(413.620056f, 892.613037f);
    path.quadTo(430.419983f, 900.629761f, 447.96701f, 894.43811f);
    path.quadTo(448.00708f, 894.42395f, 448.014038f, 894.421509f);
    path.quadTo(448.043976f, 894.410889f, 448.061066f, 894.404846f);
    path.quadTo(465.596313f, 888.179932f, 473.613037f, 871.379944f);
    path.quadTo(477.351227f, 863.546143f, 478, 855.549866f);
    path.lineTo(478, 848.804321f);
    path.quadTo(477.528076f, 842.93811f, 475.421448f, 836.985962f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(405.592621f, 909.435547f);
    pathB.lineTo(390.578583f, 867.014099f);
    pathB.lineTo(433, 852.000061f);
    pathB.lineTo(490.435486f, 879.40741f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* this cubic/quad pair
 c = 430,280 430,278.895416 473.876068,278 528,278
 q = 430,280 430.009796,277.101196 458.703552,275.050262
 only intersect at the shared point (430,280)
 they sort backwards because the tangent from pt[0] to control pt[1]
 c' = (0.00000000000000000, -1.1045837402343750)
 q' = (0.0097961425781250000, -2.8988037109375000)
 suggests that the quad is counterclockwise of the cubic, when the reverse is true
 the angle code is fooled because the control pt[1] of both the quad and cubic
 is far away from cubic cntl [2] and quad pt [2].
 Maybe in angle setup, this instability can be detected to suppress sorting on the initial tangent
 Or the error term can be passed to NearRay that is magnified by the distance from the next ctrl?
 */
static void skpnaoxrane_ru23(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(458.703552f, 275.050262f);
    path.quadTo(487.41687f, 273.000702f, 528, 273);
    path.lineTo(529, 273);
    path.quadTo(530.242371f, 273.000305f, 531.121338f, 273.878693f);
    path.quadTo(531.999695f, 274.75766f, 532, 276);
    path.lineTo(532, 378);
    path.quadTo(531.990173f, 380.898804f, 503.296448f, 382.949738f);
    path.quadTo(474.58313f, 384.999298f, 434, 385);
    path.lineTo(433, 385);
    path.quadTo(431.75766f, 384.999695f, 430.878693f, 384.121307f);
    path.quadTo(430.000305f, 383.24234f, 430, 382);
    path.lineTo(430, 280);
    path.quadTo(430.009796f, 277.101196f, 458.703552f, 275.050262f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(528, 278);
    pathB.lineTo(529, 278);
    pathB.cubicTo(530.65686f, 278, 532, 278, 532, 278);
    pathB.lineTo(532, 378);
    pathB.cubicTo(532, 379.104584f, 488.123932f, 380, 434, 380);
    pathB.lineTo(433, 380);
    pathB.cubicTo(431.34314f, 380, 430, 380, 430, 380);
    pathB.lineTo(430, 280);
    pathB.cubicTo(430, 278.895416f, 473.876068f, 278, 528, 278);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* didn't investigate thoroughly, but looks to be missorting quad and cubic
    {{468.507751,560.724426}, {467.275146,552.856262}, {465.84668,547.288391}}
    {{463.779907,542.671143}, {464.829529,542.672974}, {466.946289,550.755676}, {468.507751,560.724426}}
    decision maker is case 14 leftLessThanRight
 */
static void skptcmevents_org23(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(465.503998f, 546);
    path.lineTo(347, 546);
    path.lineTo(347, 632);
    path.lineTo(469.104248f, 632);
    path.quadTo(470.79007f, 627.638672f, 471.833496f, 621.036255f);
    path.quadTo(474.902588f, 601.562866f, 470.591064f, 574.024353f);
    path.lineTo(468.507751f, 560.724426f);
    path.quadTo(467.275146f, 552.856262f, 465.84668f, 547.288391f);
    path.quadTo(465.670349f, 546.601501f, 465.503998f, 546);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(363.052246f, 542.495361f);
    pathB.lineTo(463.779907f, 542.671143f);
    pathB.cubicTo(464.829529f, 542.672974f, 466.946289f, 550.755676f, 468.507751f, 560.724426f);
    pathB.lineTo(470.591064f, 574.024353f);
    pathB.cubicTo(476.26178f, 610.226624f, 471.498932f, 639.557922f, 459.953003f, 639.537781f);
    pathB.lineTo(368.727936f, 639.378601f);
    pathB.cubicTo(351.933868f, 639.349304f, 337.053741f, 631.244324f, 335.492249f, 621.275574f);
    pathB.lineTo(325.968597f, 560.475708f);
    pathB.cubicTo(324.407104f, 550.506958f, 341.01001f, 542.456909f, 363.052246f, 542.495361f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpredbullskatearcade_es16(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(936.765625f, 458.965302f);
    path.cubicTo(937.028442f, 453.863251f, 933.145813f, 449.864502f, 928.093445f, 450.033905f);
    path.lineTo(661.882263f, 458.958862f);
    path.lineTo(661.875366f, 458.959106f);
    path.cubicTo(656.828369f, 459.13205f, 652.525085f, 463.399719f, 652.258545f, 468.496124f);
    path.lineTo(652.258179f, 468.503662f);
    path.lineTo(649.021729f, 531.322754f);
    path.cubicTo(648.75885f, 536.424805f, 652.641479f, 540.423523f, 657.693848f, 540.25415f);
    path.lineTo(923.905029f, 531.329163f);
    path.cubicTo(928.955017f, 531.159851f, 933.262268f, 526.890442f, 933.528809f, 521.791565f);
    path.lineTo(933.529175f, 521.784363f);
    path.lineTo(936.765625f, 458.965302f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(661.882263f, 458.958862f);
    pathB.lineTo(928.093445f, 450.033905f);
    pathB.cubicTo(929.103882f, 450, 929.709961f, 454.108612f, 929.447144f, 459.210663f);
    pathB.lineTo(926.210693f, 522.029724f);
    pathB.cubicTo(926.079224f, 524.58075f, 925.153442f, 526.676208f, 924.143066f, 526.710083f);
    pathB.lineTo(657.931885f, 535.635071f);
    pathB.cubicTo(652.879456f, 535.804443f, 648.890259f, 533.873779f, 649.021729f, 531.322754f);
    pathB.lineTo(652.258179f, 468.503662f);
    pathB.cubicTo(652.520996f, 463.401611f, 656.829834f, 459.128235f, 661.882263f, 458.958862f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpfinanzasdigital_com9(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(156, 126);
    path.quadTo(154.343552f, 126.000397f, 153.17157f, 127.17157f);
    path.quadTo(152.000397f, 128.343552f, 152, 130);
    path.lineTo(152, 174);
    path.lineTo(1114, 174);
    path.lineTo(1114, 130);
    path.quadTo(1113.99963f, 128.343552f, 1112.82837f, 127.17157f);
    path.quadTo(1111.65649f, 126.000397f, 1110, 126);
    path.lineTo(156, 126);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(156, 126);
    pathB.lineTo(1110, 126);
    pathB.cubicTo(1111.65686f, 126, 1113, 127.790863f, 1113, 130);
    pathB.lineTo(1113, 174);
    pathB.lineTo(153, 174);
    pathB.lineTo(153, 130);
    pathB.cubicTo(153, 127.790863f, 154.34314f, 126, 156, 126);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skppartainasdemo250_org56(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(182.000015f, 645);
    path.lineTo(182, 640);
    path.cubicTo(174.322327f, 640, 166.644669f, 637.071045f, 160.786804f, 631.213196f);
    path.cubicTo(149.071075f, 619.497437f, 149.071075f, 600.502563f, 160.786804f, 588.786804f);
    path.lineTo(157.251266f, 585.251221f);
    path.quadTo(147, 595.502502f, 147.000015f, 610);
    path.quadTo(147, 624.482605f, 157.230255f, 634.727722f);
    path.quadTo(157.251251f, 634.748779f, 157.251282f, 634.748779f);
    path.quadTo(157.282852f, 634.780334f, 157.272263f, 634.769775f);
    path.quadTo(167.517334f, 645, 182.000015f, 645);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(182, 659.497498f);
    pathB.lineTo(206.748749f, 634.748718f);
    pathB.lineTo(182.000015f, 610);
    pathB.lineTo(132.502533f, 610);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpmlk_com326(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(154, 670);
    path.cubicTo(151.238571f, 670, 149, 672.238586f, 149, 675);
    path.lineTo(149, 710.001465f);
    path.cubicTo(149.000809f, 712.209961f, 150.791367f, 714, 153, 714);
    path.lineTo(189, 714);
    path.cubicTo(191.209137f, 714, 193, 712.209167f, 193, 710);
    path.lineTo(193, 675);
    path.cubicTo(193, 672.238586f, 190.761429f, 670, 188, 670);
    path.lineTo(154, 670);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(154, 671);
    pathB.lineTo(188, 671);
    pathB.cubicTo(190.761429f, 671, 193, 672.790833f, 193, 675);
    pathB.lineTo(193, 710);
    pathB.cubicTo(193, 712.761414f, 190.761429f, 715, 188, 715);
    pathB.lineTo(154, 715);
    pathB.cubicTo(151.238571f, 715, 149, 712.761414f, 149, 710);
    pathB.lineTo(149, 675);
    pathB.cubicTo(149, 672.790833f, 151.238571f, 671, 154, 671);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpcyclist_friends_gr52(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(50, 182);
    path.lineTo(1215, 182);
    path.lineTo(1215, 202);
    path.quadTo(1214.99951f, 204.070572f, 1213.53552f, 205.535538f);
    path.quadTo(1212.07056f, 206.999496f, 1210, 207);
    path.lineTo(55, 207);
    path.quadTo(52.9294319f, 206.999496f, 51.4644661f, 205.535538f);
    path.quadTo(50.0004997f, 204.070572f, 50, 202);
    path.lineTo(50, 182);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(50, 183);
    pathB.lineTo(1215, 183);
    pathB.lineTo(1215, 202);
    pathB.cubicTo(1215, 204.761429f, 1212.76147f, 207, 1210, 207);
    pathB.lineTo(55, 207);
    pathB.cubicTo(52.238575f, 207, 50, 204.761429f, 50, 202);
    pathB.lineTo(50, 183);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* cubic ends just above opp line */
static void skpwww_fj_p_com_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(172, 201);
    path.lineTo(172, 202);
    path.lineTo(220, 202);
    path.cubicTo(221.65686f, 202, 223, 200.65686f, 223, 199);
    path.cubicTo(223, 200.104568f, 221.65686f, 201, 220, 201);
    path.lineTo(172, 201);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(161, 202);
    pathB.lineTo(161, 199);
    pathB.lineTo(223, 199.000015f);
    pathB.lineTo(223, 202);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// pair of lines are not quite coincident, so sorting line/cubic fails (i think)
static void skpwww_lavoixdunord_fr_11(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(806, 57);
    path.cubicTo(806, 55.3431473f, 807.34314f, 54, 809, 54);
    path.lineTo(930, 54);
    path.cubicTo(931.65686f, 54, 933, 55.3431473f, 933, 57);
    path.lineTo(933, 91);
    path.cubicTo(933, 92.6568527f, 931.65686f, 94, 930, 94);
    path.lineTo(809, 94);
    path.cubicTo(807.34314f, 94, 806, 92.6568527f, 806, 91);
    path.lineTo(806, 57);
    path.close();
    path.moveTo(808, 58);
    path.cubicTo(808, 56.8954315f, 808.895447f, 56, 810, 56);
    path.lineTo(929, 56);
    path.cubicTo(930.104553f, 56, 931, 56.8954315f, 931, 58);
    path.lineTo(931, 90);
    path.cubicTo(931, 91.1045685f, 930.104553f, 92, 929, 92);
    path.lineTo(810, 92);
    path.cubicTo(808.895447f, 92, 808, 91.1045685f, 808, 90);
    path.lineTo(808, 58);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(806, 54);
    pathB.lineTo(808, 56);
    pathB.lineTo(935.02002f, 56.0200005f);
    pathB.lineTo(933, 54);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// pair of curves have nearly the same initial tangent but are sorting by
// that alone sorts them incorrectly. Need to detect that tangents are nearly
// identical and not reliable by themselves
static void skppptv_com_62(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(173, 5342);
    path.quadTo(171.343536f, 5342.00049f, 170.17157f, 5343.17139f);
    path.quadTo(169.000397f, 5344.34375f, 169, 5346);
    path.lineTo(169, 5372);
    path.lineTo(234, 5372);
    path.lineTo(234, 5346);
    path.quadTo(233.999603f, 5344.34375f, 232.82843f, 5343.17139f);
    path.quadTo(231.656464f, 5342.00049f, 230, 5342);
    path.lineTo(173, 5342);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(173, 5342);
    pathB.lineTo(230, 5342);
    pathB.cubicTo(231.65686f, 5342, 233, 5343.79102f, 233, 5346);
    pathB.lineTo(233, 5372);
    pathB.lineTo(169, 5372);
    pathB.lineTo(169, 5346);
    pathB.cubicTo(169, 5343.79102f, 170.790863f, 5342, 173, 5342);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// nearly identical to lavoixdunord -- to not-quite-coincident lines
static void skpwww_booking_com_68(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(90, 187);
    path.cubicTo(90, 185.34314f, 91.3431473f, 184, 93, 184);
    path.lineTo(588, 184);
    path.cubicTo(589.65686f, 184, 591, 185.34314f, 591, 187);
    path.lineTo(591, 218);
    path.cubicTo(591, 219.65686f, 589.65686f, 221, 588, 221);
    path.lineTo(93, 221);
    path.cubicTo(91.3431473f, 221, 90, 219.65686f, 90, 218);
    path.lineTo(90, 187);
    path.close();
    path.moveTo(92, 188);
    path.cubicTo(92, 186.895432f, 92.8954315f, 186, 94, 186);
    path.lineTo(587, 186);
    path.cubicTo(588.104553f, 186, 589, 186.895432f, 589, 188);
    path.lineTo(589, 217);
    path.cubicTo(589, 218.104568f, 588.104553f, 219, 587, 219);
    path.lineTo(94, 219);
    path.cubicTo(92.8954315f, 219, 92, 218.104568f, 92, 217);
    path.lineTo(92, 188);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(90, 184);
    pathB.lineTo(92, 186);
    pathB.lineTo(593.02002f, 186.020004f);
    pathB.lineTo(591, 184);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// visually looks like lavoixdunord and www_booking_com
static void skpwww_despegar_com_mx_272(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(635, 1788);
    path.cubicTo(635, 1786.34314f, 636.34314f, 1785, 638, 1785);
    path.lineTo(832, 1785);
    path.cubicTo(833.65686f, 1785, 835, 1786.34314f, 835, 1788);
    path.lineTo(835, 1812);
    path.cubicTo(835, 1813.65686f, 833.65686f, 1815, 832, 1815);
    path.lineTo(638, 1815);
    path.cubicTo(636.34314f, 1815, 635, 1813.65686f, 635, 1812);
    path.lineTo(635, 1788);
    path.close();
    path.moveTo(637, 1789);
    path.cubicTo(637, 1787.89539f, 637.895447f, 1787, 639, 1787);
    path.lineTo(831, 1787);
    path.cubicTo(832.104553f, 1787, 833, 1787.89539f, 833, 1789);
    path.lineTo(833, 1811);
    path.cubicTo(833, 1812.10461f, 832.104553f, 1813, 831, 1813);
    path.lineTo(639, 1813);
    path.cubicTo(637.895447f, 1813, 637, 1812.10461f, 637, 1811);
    path.lineTo(637, 1789);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(835, 1785);
    pathB.lineTo(833, 1787);
    pathB.lineTo(832.97998f, 1817.02002f);
    pathB.lineTo(835, 1815);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_joomla_org_23(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(320, 347);
    path.cubicTo(320, 344.238586f, 322.238586f, 342, 325, 342);
    path.lineTo(416, 342);
    path.cubicTo(418.761414f, 342, 421, 344.238586f, 421, 347);
    path.cubicTo(421, 344.790863f, 418.761414f, 343, 416, 343);
    path.lineTo(325, 343);
    path.cubicTo(322.238586f, 343, 320, 344.790863f, 320, 347);
    path.close();
    path.moveTo(320, 378);
    path.cubicTo(320, 380.761414f, 322.238586f, 383, 325, 383);
    path.lineTo(416, 383);
    path.cubicTo(418.761414f, 383, 421, 380.761414f, 421, 378);
    path.cubicTo(421, 380.209137f, 418.761414f, 382, 416, 382);
    path.lineTo(325, 382);
    path.cubicTo(322.238586f, 382, 320, 380.209137f, 320, 378);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(320, 383);
    pathB.lineTo(320, 378);
    pathB.lineTo(421, 378.000031f);
    pathB.lineTo(421, 383);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_macrumors_com_131(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(136, 14089);
    path.lineTo(136, 14056);
    path.lineTo(778, 14056);
    path.lineTo(778, 14089);
    path.quadTo(777.999573f, 14090.6562f, 776.82843f, 14091.8281f);
    path.quadTo(775.656433f, 14093, 774, 14093);
    path.lineTo(140, 14093);
    path.quadTo(138.343552f, 14093, 137.17157f, 14091.8281f);
    path.quadTo(136.000397f, 14090.6562f, 136, 14089);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(136, 14057);
    pathB.lineTo(778, 14057);
    pathB.lineTo(778, 14089);
    pathB.cubicTo(778, 14091.209f, 776.209167f, 14093, 774, 14093);
    pathB.lineTo(140, 14093);
    pathB.cubicTo(137.790863f, 14093, 136, 14091.209f, 136, 14089);
    pathB.lineTo(136, 14057);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_leadpages_net_84(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(377.1716f, 5910.17139f);
    path.cubicTo(376.447723f, 5910.89551f, 376, 5911.89551f, 376, 5913);
    path.lineTo(376, 5972);
    path.cubicTo(376, 5974.20898f, 377.790863f, 5976, 380, 5976);
    path.cubicTo(378.34314f, 5976, 377, 5974.20898f, 377, 5972);
    path.lineTo(377, 5913);
    path.cubicTo(377, 5912.17139f, 377.335785f, 5911.42188f, 377.878693f, 5910.87891f);
    path.lineTo(377.1716f, 5910.17139f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(376, 5909);
    pathB.lineTo(378.481873f, 5909);
    pathB.lineTo(379.999878f, 5976);
    pathB.lineTo(376, 5976);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_briian_com_34(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(843, 216);
    path.cubicTo(843, 213.238571f, 845.238586f, 211, 848, 211);
    path.lineTo(1191, 211);
    path.cubicTo(1193.76147f, 211, 1196, 213.238571f, 1196, 216);
    path.lineTo(1196, 779);
    path.cubicTo(1196, 781.761414f, 1193.76147f, 784, 1191, 784);
    path.lineTo(848, 784);
    path.cubicTo(845.238586f, 784, 843, 781.761414f, 843, 779);
    path.lineTo(843, 216);
    path.close();
    path.moveTo(844, 217);
    path.cubicTo(844, 214.238571f, 846.238586f, 212, 849, 212);
    path.lineTo(1190, 212);
    path.cubicTo(1192.76147f, 212, 1195, 214.238571f, 1195, 217);
    path.lineTo(1195, 778);
    path.cubicTo(1195, 779.65686f, 1192.76147f, 781, 1190, 781);
    path.lineTo(849, 781);
    path.cubicTo(846.238586f, 781, 844, 779.65686f, 844, 778);
    path.lineTo(844, 217);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(843, 784);
    pathB.lineTo(843, 779);
    pathB.lineTo(1196, 779.000061f);
    pathB.lineTo(1196, 784);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_sciality_com_100(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(162, 468);
    path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472);
    path.lineTo(158, 528);
    path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532);
    path.lineTo(275, 532);
    path.cubicTo(277.209137f, 532, 279, 530.209106f, 279, 528);
    path.lineTo(279, 472);
    path.cubicTo(279, 469.790863f, 277.209137f, 468, 275, 468);
    path.lineTo(162, 468);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(275, 468);
    pathB.cubicTo(276.65686f, 468, 278, 469.34314f, 278, 471);
    pathB.lineTo(278, 529);
    pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532);
    pathB.lineTo(161, 532);
    pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529);
    pathB.lineTo(158, 471);
    pathB.cubicTo(158, 469.34314f, 159.34314f, 468, 161, 468);
    pathB.lineTo(275, 468);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_sciality_com_101(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(162, 468);
    path.cubicTo(159.790863f, 468, 158, 469.790863f, 158, 472);
    path.lineTo(158, 528);
    path.cubicTo(158, 530.209106f, 159.790863f, 532, 162, 532);
    path.lineTo(275.009186f, 532);
    path.cubicTo(276.661774f, 531.994995f, 278, 530.653748f, 278, 529);
    path.lineTo(278, 471);
    path.cubicTo(278, 469.346375f, 276.662079f, 468.005249f, 275.009705f, 468);
    path.lineTo(162, 468);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(161, 469);
    pathB.lineTo(275, 469);
    pathB.cubicTo(276.65686f, 469, 278, 469.895416f, 278, 471);
    pathB.lineTo(278, 529);
    pathB.cubicTo(278, 530.65686f, 276.65686f, 532, 275, 532);
    pathB.lineTo(161, 532);
    pathB.cubicTo(159.34314f, 532, 158, 530.65686f, 158, 529);
    pathB.lineTo(158, 471);
    pathB.cubicTo(158, 469.895416f, 159.34314f, 469, 161, 469);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_meb_gov_tr_5(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(137.34314f, 145.34314f);
    path.quadTo(139.687088f, 143.000793f, 143, 143);
    path.lineTo(242, 143);
    path.quadTo(245.312912f, 143.000793f, 247.65686f, 145.34314f);
    path.quadTo(249.999207f, 147.687088f, 250, 151);
    path.lineTo(250, 177);
    path.lineTo(135, 177);
    path.lineTo(135, 151);
    path.quadTo(135.000793f, 147.687088f, 137.34314f, 145.34314f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(135, 143);
    pathB.lineTo(250, 143);
    pathB.lineTo(250, 177);
    pathB.lineTo(135, 177);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_meb_gov_tr_6(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143, 143);
    path.quadTo(139.687088f, 143.000793f, 137.34314f, 145.34314f);
    path.quadTo(135.000793f, 147.687088f, 135, 151);
    path.lineTo(135, 177);
    path.lineTo(250, 177);
    path.lineTo(250, 151);
    path.quadTo(249.999207f, 147.687088f, 247.65686f, 145.34314f);
    path.quadTo(245.312912f, 143.000793f, 242, 143);
    path.lineTo(143, 143);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(143, 143);
    pathB.lineTo(242, 143);
    pathB.cubicTo(245.865997f, 143, 249, 146.581726f, 249, 151);
    pathB.lineTo(249, 177);
    pathB.lineTo(135, 177);
    pathB.lineTo(135, 151);
    pathB.cubicTo(135, 146.581726f, 138.581726f, 143, 143, 143);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpgithub_io_25(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1001.87866f, 14.8786793f);
    path.quadTo(1002.75745f, 14.0001001f, 1004, 14);
    path.lineTo(1105, 14);
    path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f);
    path.quadTo(1107.99988f, 15.7574596f, 1108, 17);
    path.lineTo(1108, 41);
    path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f);
    path.quadTo(1106.24255f, 43.9999008f, 1105, 44);
    path.lineTo(1004, 44);
    path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f);
    path.quadTo(1001.00012f, 42.2425423f, 1001, 41);
    path.lineTo(1001, 17);
    path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(1005, 16);
    pathB.lineTo(1104, 16);
    pathB.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18);
    pathB.lineTo(1106, 40);
    pathB.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42);
    pathB.lineTo(1005, 42);
    pathB.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40);
    pathB.lineTo(1003, 18);
    pathB.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpgithub_io_26(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1001.87866f, 14.8786793f);
    path.quadTo(1002.75745f, 14.0001001f, 1004, 14);
    path.lineTo(1105, 14);
    path.quadTo(1106.24255f, 14.0001001f, 1107.12134f, 14.8786793f);
    path.quadTo(1107.99988f, 15.7574596f, 1108, 17);
    path.lineTo(1108, 41);
    path.quadTo(1107.99988f, 42.2425423f, 1107.12134f, 43.1213188f);
    path.quadTo(1106.24255f, 43.9999008f, 1105, 44);
    path.lineTo(1004, 44);
    path.quadTo(1002.75745f, 43.9999008f, 1001.87866f, 43.1213188f);
    path.quadTo(1001.00012f, 42.2425423f, 1001, 41);
    path.lineTo(1001, 17);
    path.quadTo(1001.00012f, 15.7574596f, 1001.87866f, 14.8786793f);
    path.close();
    path.moveTo(1003, 18);
    path.cubicTo(1003, 16.8954296f, 1003.89545f, 16, 1005, 16);
    path.lineTo(1104, 16);
    path.cubicTo(1105.10461f, 16, 1106, 16.8954296f, 1106, 18);
    path.lineTo(1106, 40);
    path.cubicTo(1106, 41.1045685f, 1105.10461f, 42, 1104, 42);
    path.lineTo(1005, 42);
    path.cubicTo(1003.89545f, 42, 1003, 41.1045685f, 1003, 40);
    path.lineTo(1003, 18);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1108, 14);
    pathB.lineTo(1106, 16);
    pathB.lineTo(1105.97998f, 46.0200005f);
    pathB.lineTo(1108, 44);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpskpicture14(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 994);
    path.lineTo(0, 0);
    path.lineTo(512, 0);
    path.lineTo(512, 994);
    path.lineTo(0, 994);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(-317, 168);
    pathB.quadTo(-317, 166.757385f, -316.121338f, 165.878662f);
    pathB.quadTo(-315.242645f, 165, -314, 165);
    pathB.lineTo(320, 165);
    pathB.quadTo(321.242615f, 165, 322.121338f, 165.878662f);
    pathB.quadTo(323, 166.757385f, 323, 168);
    pathB.lineTo(323, 193);
    pathB.lineTo(-317, 193);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpskpicture15(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 193);
    path.lineTo(323, 193);
    path.lineTo(323, 168);
    path.quadTo(323, 166.757385f, 322.121338f, 165.878662f);
    path.quadTo(321.242615f, 165, 320, 165);
    path.lineTo(0, 165);
    path.lineTo(0, 193);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kInverseWinding_FillType);
    pathB.moveTo(-314, 165);
    pathB.lineTo(320, 165);
    pathB.cubicTo(321.65686f, 165, 323, 166.34314f, 323, 168);
    pathB.lineTo(323, 192);
    pathB.lineTo(-317, 192);
    pathB.lineTo(-317, 168);
    pathB.cubicTo(-317, 166.34314f, -315.65686f, 165, -314, 165);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* Three edges are partially coincident. Only one of the three knows about the other two.
   Subsequently, when the angle loop is created, it misses one of the edges.
   After coincident edges are processed, probably need a check-and-correct that makes sure the
   coincidences are all self-consistent.
 */
static void skpelpais_com_18(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(183, 8507);
    path.lineTo(552, 8506.99023f);
    path.lineTo(552, 8508);
    path.lineTo(183, 8508);
    path.lineTo(183, 8507);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(183, 8508);
    pathB.lineTo(183, 8506.99023f);
    pathB.lineTo(552, 8507);
    pathB.lineTo(552, 8508);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* this generates a pair of lines that are essentially coincident; but the next line at a right
   angle is not treated as if it intersects at the same point.
   There are several of options:
     move the intersection of the right angle line to the coincident point (should 'near' do this?
     construct another coincident pair from the right angle line to the coincident point
     treat the intersection as simple and not coincident
 */
static void skpnamecheap_com_405(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(140, 1000);
    path.lineTo(140, 842);
    path.lineTo(141, 842);
    path.lineTo(141.14502f, 1000);
    path.lineTo(140, 1000);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(140, 842);
    pathB.lineTo(141.008835f, 837.9646f);
    pathB.lineTo(141.235291f, 1109.05884f);
    pathB.lineTo(140, 1114);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// fails on angle insert -- haven't investigated yet
static void skpwww_alrakoba_net_62(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(134.34314f, 9802.34277f);
    path.quadTo(132, 9804.68652f, 132, 9808);
    path.lineTo(132, 9822);
    path.quadTo(132, 9825.31348f, 134.34314f, 9827.65723f);
    path.quadTo(136.686295f, 9830, 140, 9830);
    path.lineTo(140.028473f, 9830);
    path.lineTo(139.877213f, 9828.90723f);
    path.quadTo(137.692032f, 9828.5332f, 136.050247f, 9826.65723f);
    path.quadTo(134, 9824.31348f, 134, 9821);
    path.lineTo(134, 9809);
    path.quadTo(134, 9806.10059f, 136.050247f, 9804.0498f);
    path.lineTo(134.34314f, 9802.34277f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(132, 9800);
    pathB.lineTo(135.962357f, 9800);
    pathB.lineTo(140, 9830);
    pathB.lineTo(132, 9830);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

/* asserts in alignSpanState looks like a coincident related bug */
static void skpwww_cityads_ru_249(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(817.464478f, 11.4644661f);
    path.quadTo(818.928955f, 10, 821, 10);
    path.lineTo(998, 10);
    path.quadTo(999.082947f, 10, 1000, 10.4003992f);
    path.lineTo(1000, 13.3527431f);
    path.quadTo(999.917603f, 13.2607508f, 999.82843f, 13.1715727f);
    path.quadTo(998.65686f, 12, 997, 12);
    path.lineTo(822, 12);
    path.quadTo(820.34314f, 12, 819.17157f, 13.1715727f);
    path.quadTo(818, 14.3431454f, 818, 16);
    path.lineTo(818, 28);
    path.quadTo(818, 29.6568546f, 819.17157f, 30.8284264f);
    path.quadTo(820.34314f, 32, 822, 32);
    path.lineTo(997, 32);
    path.quadTo(998.65686f, 32, 999.82843f, 30.8284264f);
    path.quadTo(999.917603f, 30.7392426f, 1000, 30.6472569f);
    path.lineTo(1000, 33.5996017f);
    path.quadTo(999.082947f, 34, 998, 34);
    path.lineTo(821, 34);
    path.quadTo(818.928955f, 34, 817.464478f, 32.5355339f);
    path.quadTo(816, 31.0710678f, 816, 29);
    path.lineTo(816, 15);
    path.quadTo(816, 12.9289322f, 817.464478f, 11.4644661f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1003, 10);
    pathB.lineTo(1000, 13);
    pathB.lineTo(999.969971f, 37.0299988f);
    pathB.lineTo(1003, 34);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// fails on angle insert
static void skpwww_dealnews_com_315(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(966.464478f, 4261.46436f);
    path.quadTo(965, 4262.92871f, 965, 4265);
    path.lineTo(965, 4276);
    path.quadTo(965, 4278.07129f, 966.464478f, 4279.53564f);
    path.quadTo(967.928955f, 4281, 970, 4281);
    path.lineTo(970.020325f, 4281);
    path.lineTo(969.887512f, 4279.81641f);
    path.quadTo(968.928284f, 4279.48145f, 968.17157f, 4278.53564f);
    path.quadTo(967, 4277.07129f, 967, 4275);
    path.lineTo(967, 4266);
    path.quadTo(967, 4264.44287f, 968.035217f, 4263.31396f);
    path.lineTo(968, 4263);
    path.lineTo(966.464478f, 4261.46436f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(965, 4260);
    pathB.lineTo(967.716675f, 4260);
    pathB.lineTo(970, 4281);
    pathB.lineTo(965, 4281);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// fails in intersections insert
static void skpwww_inmotionhosting_com_9(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(991.633911f, 1839);
    path.lineTo(964.265015f, 1839);
    path.lineTo(963.734985f, 1893.73242f);
    path.lineTo(991.3703f, 1894);
    path.lineTo(1018.23492f, 1894);
    path.lineTo(1018.76501f, 1839.2627f);
    path.lineTo(991.638184f, 1839);
    path.lineTo(991.633911f, 1839);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(964.267578f, 1838.73499f);
    pathB.lineTo(1019.26501f, 1839.26758f);
    pathB.lineTo(1018.73242f, 1894.26501f);
    pathB.lineTo(963.734985f, 1893.73242f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_alucinados_net_101(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1129.53552f, 1164.46448f);
    path.lineTo(1128, 1166);
    path.lineTo(1128.12231f, 1166.49548f);
    path.quadTo(1129, 1167.56592f, 1129, 1169);
    path.lineTo(1129, 1170.05054f);
    path.lineTo(1130.34509f, 1175.49878f);
    path.quadTo(1131, 1174.38513f, 1131, 1173);
    path.lineTo(1131, 1168);
    path.quadTo(1131, 1165.92896f, 1129.53552f, 1164.46448f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1131, 1163);
    pathB.lineTo(-43515.8555f, -177415.594f);
    pathB.lineTo(1129.76465f, 1173.05884f);
    pathB.lineTo(1131, 1178);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// /SkOpContour.cpp:278: failed assertion "!approximately_negative(oEndT - oStartT)
static void skpwww_hairjobsearch_com_31(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143.292892f, 0.707106769f);
    path.quadTo(143, 0.414213538f, 143, 0);
    path.lineTo(1123, 0);
    path.quadTo(1123, 0.414213538f, 1122.70715f, 0.707106769f);
    path.quadTo(1122.41418f, 1, 1122, 1);
    path.lineTo(144, 1);
    path.quadTo(143.585785f, 1, 143.292892f, 0.707106769f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(143, 1);
    pathB.lineTo(144, 0);
    pathB.lineTo(1122, 0);
    pathB.lineTo(1123, 1);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpSegment::checkSmallCoincidence; line 1958 SkASSERT(span.fWindValue);
static void skpwww_heartiste_wordpress_com_86(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(741, 9432);
    path.lineTo(761, 9431.99023f);
    path.lineTo(761, 9433);
    path.lineTo(741, 9433);
    path.lineTo(741, 9432);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(741, 9433);
    pathB.lineTo(741, 9431.99023f);
    pathB.lineTo(761, 9432);
    pathB.lineTo(761, 9433);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_argus_presse_fr_41(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 343);
    path.lineTo(165, 343);
    path.lineTo(165, 364.869873f);
    path.lineTo(1000, 364.869873f);
    path.lineTo(1000, 343);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(165, 343.000031f);
    pathB.lineTo(1000, 343.000031f);
    pathB.lineTo(1000, 364.869904f);
    pathB.lineTo(165, 364.869904f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpSegment::checkSmallCoincidence; line 1958 SkASSERT(span.fWindValue);
static void skpwww_320kbps_net_2231(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(838, 9125);
    path.lineTo(862, 9124.99023f);
    path.lineTo(862, 9126);
    path.lineTo(838, 9126);
    path.lineTo(838, 9125);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(838, 9126);
    pathB.lineTo(838, 9124.99023f);
    pathB.lineTo(862, 9125);
    pathB.lineTo(862, 9126);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// debugValidateLoop loop sum fails
static void skpwww_exystence_net_61(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143, 9075);
    path.lineTo(316, 9075);
    path.lineTo(316, 9073.99023f);
    path.lineTo(143, 9074);
    path.lineTo(143, 9075);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(143, 9075);
    pathB.lineTo(143, 9073.99023f);
    pathB.lineTo(316, 9074);
    pathB.lineTo(316, 9075);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// debugValidateLoop loop sum fails
static void skpwww_trashness_com_36(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(541.5f, 4835.99512f);
    path.lineTo(91.5f, 4836);
    path.lineTo(91.5f, 4836.5f);
    path.lineTo(541.5f, 4836.5f);
    path.lineTo(541.5f, 4835.99512f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(91.5f, 4836.5f);
    pathB.lineTo(91.5f, 4835.99512f);
    pathB.lineTo(541.5f, 4836);
    pathB.lineTo(541.5f, 4836.5f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkIntersections::lineVertical fUsed >= fMax
static void skpwww_getgold_jp_731(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(284.878693f, 10134.8789f);
    path.quadTo(284, 10135.7578f, 284, 10137);
    path.lineTo(284, 10216);
    path.quadTo(284, 10217.2422f, 284.878693f, 10218.1211f);
    path.quadTo(285.125122f, 10218.3672f, 285.40213f, 10218.5459f);
    path.lineTo(286, 10138);
    path.lineTo(286, 10136);
    path.lineTo(284.878693f, 10134.8789f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(284, 10134);
    pathB.lineTo(286.05957f, 10129.8809f);
    pathB.lineTo(285.399994f, 10216.2002f);
    pathB.lineTo(284, 10219);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpContour::calcPartialCoincidentWinding SkASSERT(!approximately_negative(endT - startT));
static void skpwww_maturesupertube_com_21(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(3.17157292f, 11831.1719f);
    path.quadTo(4.34314585f, 11830, 6, 11830);
    path.lineTo(1259, 11830);
    path.quadTo(1260.65686f, 11830, 1261.82837f, 11831.1719f);
    path.quadTo(1263, 11832.3428f, 1263, 11834);
    path.lineTo(1263, 11848);
    path.quadTo(1263, 11849.6572f, 1261.82837f, 11850.8281f);
    path.quadTo(1260.65686f, 11852, 1259, 11852);
    path.lineTo(6, 11852);
    path.quadTo(4.34314585f, 11852, 3.17157292f, 11850.8281f);
    path.quadTo(2, 11849.6572f, 2, 11848);
    path.lineTo(2, 11834);
    path.quadTo(2, 11832.3428f, 3.17157292f, 11831.1719f);
    path.close();
    path.moveTo(3.87867975f, 11831.8789f);
    path.quadTo(4.7573595f, 11831, 6, 11831);
    path.lineTo(1259, 11831);
    path.quadTo(1260.24268f, 11831, 1261.12134f, 11831.8789f);
    path.quadTo(1262, 11832.7578f, 1262, 11834);
    path.lineTo(1262, 11848);
    path.quadTo(1262, 11849.2422f, 1261.12134f, 11850.1211f);
    path.quadTo(1260.24268f, 11851, 1259, 11851);
    path.lineTo(6, 11851);
    path.quadTo(4.7573595f, 11851, 3.87867975f, 11850.1211f);
    path.quadTo(3, 11849.2422f, 3, 11848);
    path.lineTo(3, 11834);
    path.quadTo(3, 11832.7578f, 3.87867975f, 11831.8789f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(2, 11830);
    pathB.lineTo(4.5f, 11832.5f);
    pathB.lineTo(1260.5f, 11832.5f);
    pathB.lineTo(1263, 11830);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// can't find winding of remaining vertical edges
static void skpwww_hubbyscook_com_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 902.329346f);
    path.quadTo(998, 905.250427f, 998, 909);
    path.lineTo(998, 910);
    path.quadTo(998, 913.749573f, 1000, 916.670654f);
    path.lineTo(1000, 902.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 910);
    pathB.lineTo(998, 909);
    pathB.quadTo(998, 904.029419f, 1001.51471f, 900.514709f);
    pathB.quadTo(1005.02942f, 897, 1010, 897);
    pathB.lineTo(1011, 897);
    pathB.quadTo(1015.14215f, 897, 1018.07104f, 900.514709f);
    pathB.quadTo(1021, 904.029419f, 1021, 909);
    pathB.lineTo(1021, 910);
    pathB.quadTo(1021, 914.142151f, 1018.07104f, 917.071045f);
    pathB.quadTo(1015.14215f, 920, 1011, 920);
    pathB.lineTo(1010, 920);
    pathB.quadTo(1005.02942f, 920, 1001.51471f, 917.071045f);
    pathB.quadTo(998, 914.142151f, 998, 910);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

static void skpwww_gruposejaumdivulgador_com_br_4(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(610.5f, 5.78626502e-14f);
    path.lineTo(1083.5f, -6.12303177e-17f);
    path.lineTo(1083.5f, 469);
    path.lineTo(610.5f, 469);
    path.lineTo(610.5f, 5.78626502e-14f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(611, 0);
    pathB.lineTo(1084, 0);
    pathB.lineTo(1084, 469);
    pathB.lineTo(611, 469);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// asserts in bridgeOp simple->isClosed()
static void skpwww_phototransferapp_com_24(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(85.6091843f, 5.92893219f);
    path.quadTo(89.6041641f, 3, 93.7462997f, 3);
    path.lineTo(1212.74634f, 3);
    path.quadTo(1216.88843f, 3, 1218.75134f, 5.92893219f);
    path.quadTo(1220.61414f, 8.85775471f, 1219.10669f, 12.9996767f);
    path.quadTo(1220.46338f, 9.27196693f, 1218.4939f, 6.63603878f);
    path.quadTo(1216.52441f, 4, 1212.38232f, 4);
    path.lineTo(93.3823318f, 4);
    path.quadTo(89.2401962f, 4, 85.3518219f, 6.63603878f);
    path.quadTo(81.4634476f, 9.27207756f, 80.1065979f, 13);
    path.quadTo(81.614212f, 8.85786438f, 85.6091843f, 5.92893219f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(83.7462997f, 3);
    pathB.lineTo(1222.74634f, 3);
    pathB.lineTo(1219.10657f, 13);
    pathB.lineTo(80.1065979f, 13);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_phototransferapp_com_24x(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(85.6091843f, 5.92893219f);
    path.quadTo(89.6041641f, 3, 93.7462997f, 3);
    path.lineTo(112.74634f, 3);
    path.quadTo(116.88843f, 3, 118.75134f, 5.92893219f);
    path.quadTo(120.61414f, 8.85775471f, 119.10669f, 12.9996767f);
    path.quadTo(120.46338f, 9.27196693f, 118.4939f, 6.63603878f);
    path.quadTo(116.52441f, 4, 112.38232f, 4);
    path.lineTo(93.3823318f, 4);
    path.quadTo(89.2401962f, 4, 85.3518219f, 6.63603878f);
    path.quadTo(81.4634476f, 9.27207756f, 80.1065979f, 13);
    path.quadTo(81.614212f, 8.85786438f, 85.6091843f, 5.92893219f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(83.7462997f, 3);
    pathB.lineTo(122.74634f, 3);
    pathB.lineTo(119.10657f, 13);
    pathB.lineTo(80.1065979f, 13);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_helha_be_109(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(117.686981f, 3339.08423f);
    path.lineTo(109.533035f, 3350.72925f);
    path.quadTo(107.120552f, 3354.17456f, 103.879379f, 3354.41821f);
    path.quadTo(100.638504f, 3354.66187f, 98.4674301f, 3351.56177f);
    path.quadTo(100.87973f, 3355.00635f, 104.291222f, 3355.00635f);
    path.quadTo(107.70298f, 3355.00635f, 110.115463f, 3351.56104f);
    path.lineTo(118, 3340.30078f);
    path.lineTo(118, 3339.53125f);
    path.lineTo(117.686981f, 3339.08423f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(118.269409f, 3339.91602f);
    pathB.lineTo(117.686981f, 3339.08423f);
    pathB.lineTo(98.4669647f, 3351.56104f);
    pathB.lineTo(104.291214f, 3359.87891f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_cooksnaps_com_32(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(509.34021f, 176);
    path.lineTo(505, 176);
    path.quadTo(500.964233f, 176, 497.299988f, 176.896912f);
    path.quadTo(493.678162f, 177.952286f, 490.183014f, 179.9702f);
    path.lineTo(489.316986f, 180.4702f);
    path.quadTo(485.175385f, 182.861359f, 482.115265f, 186.082397f);
    path.quadTo(479.69455f, 188.700821f, 477.995941f, 191.618286f);
    path.quadTo(476.316772f, 194.550476f, 475.258759f, 197.959335f);
    path.quadTo(474, 202.218979f, 474, 207);
    path.lineTo(474, 208);
    path.quadTo(474, 212.03569f, 474.896851f, 215.699799f);
    path.quadTo(475.950256f, 219.315002f, 477.962708f, 222.803986f);
    path.lineTo(477.970215f, 222.816986f);
    path.lineTo(478.470215f, 223.683014f);
    path.quadTo(478.474915f, 223.691162f, 478.479645f, 223.69931f);
    path.quadTo(480.867981f, 227.831055f, 484.082947f, 230.885254f);
    path.quadTo(486.701447f, 233.305939f, 489.61908f, 235.004517f);
    path.quadTo(492.550232f, 236.682983f, 495.957611f, 237.740738f);
    path.quadTo(500.217987f, 239, 505, 239);
    path.lineTo(509.482178f, 239);
    path.quadTo(515.299133f, 238.212051f, 520.801941f, 235.038513f);
    path.quadTo(520.809509f, 235.034164f, 520.817017f, 235.0298f);
    path.lineTo(521.683044f, 234.5298f);
    path.quadTo(521.692078f, 234.524582f, 521.701111f, 234.519348f);
    path.quadTo(532.80603f, 228.09938f, 536.126709f, 215.70639f);
    path.quadTo(539.450134f, 203.303314f, 533.029785f, 192.183014f);
    path.lineTo(532.529785f, 191.316986f);
    path.quadTo(526.109497f, 180.196686f, 513.706421f, 176.873276f);
    path.quadTo(511.503082f, 176.282898f, 509.34021f, 176);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(478.470215f, 223.683014f);
    pathB.lineTo(477.970215f, 222.816986f);
    pathB.quadTo(471.549896f, 211.696686f, 474.873322f, 199.293594f);
    pathB.quadTo(478.196686f, 186.890503f, 489.316986f, 180.4702f);
    pathB.lineTo(490.183014f, 179.9702f);
    pathB.quadTo(501.303345f, 173.549896f, 513.706421f, 176.873276f);
    pathB.quadTo(526.109497f, 180.196686f, 532.529785f, 191.316986f);
    pathB.lineTo(533.029785f, 192.183014f);
    pathB.quadTo(539.450134f, 203.303314f, 536.126709f, 215.70639f);
    pathB.quadTo(532.803345f, 228.109497f, 521.683044f, 234.5298f);
    pathB.lineTo(520.817017f, 235.0298f);
    pathB.quadTo(509.696686f, 241.450104f, 497.29361f, 238.126709f);
    pathB.quadTo(484.890533f, 234.803314f, 478.470215f, 223.683014f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_cooksnaps_com_32a(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(497.299988f, 176.896912f);
    path.quadTo(493.678162f, 177.952286f, 490.183014f, 179.9702f);
    path.lineTo(489.316986f, 180.4702f);
    path.quadTo(485.175385f, 182.861359f, 482.115265f, 186.082397f);
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(474.873322f, 199.293594f);
    pathB.quadTo(478.196686f, 186.890503f, 489.316986f, 180.4702f);
    pathB.lineTo(490.183014f, 179.9702f);
    pathB.quadTo(501.303345f, 173.549896f, 513.706421f, 176.873276f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// !simple->isClosed()
static void skpwww_contextualnewsfeeds_com_346(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(460.257355f, 1202.27808f);
    path.lineTo(460.257355f, 1204.27808f);
    path.quadTo(461.081207f, 1204.27808f, 461.665161f, 1203.69873f);
    path.lineTo(461.67157f, 1203.69238f);
    path.lineTo(466.621307f, 1198.74268f);
    path.quadTo(466.623993f, 1198.73999f, 466.626648f, 1198.7373f);
    path.quadTo(466.914185f, 1198.44604f, 466.914185f, 1198.03552f);
    path.quadTo(466.914215f, 1197.62122f, 466.621307f, 1197.32837f);
    path.lineTo(465.914215f, 1196.62122f);
    path.lineTo(460.257355f, 1202.27808f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(460.257355f, 1205.10657f);
    pathB.lineTo(458.828979f, 1203.67822f);
    pathB.lineTo(465.914215f, 1196.62122f);
    pathB.lineTo(467.32843f, 1198.03552f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// line quad intersection SkIntersections::assert
static void skpwww_pindosiya_com_99(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(899.17157f, 548.17157f);
    path.quadTo(898, 549.34314f, 898, 551);
    path.lineTo(898, 556);
    path.lineTo(899.027283f, 556);
    path.lineTo(900.02356f, 551.602844f);
    path.quadTo(900.06073f, 551.297058f, 900.156555f, 551.015747f);
    path.lineTo(900.5f, 549.5f);
    path.lineTo(899.17157f, 548.17157f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(898, 547);
    pathB.lineTo(901.086914f, 547);
    pathB.lineTo(899, 556);
    pathB.lineTo(898, 556);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpAngle::setSector SkASSERT(fSectorStart >= 0);
static void skpwww_karnivool_com_au_11(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(0, 1431);
    path.lineTo(0, 775);
    path.lineTo(1265, 775);
    path.lineTo(1265, 1431);
    path.lineTo(0, 1431);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(32.3243904f, 851);
    pathB.lineTo(459.324402f, 851);
    pathB.lineTo(427, 1081);
    pathB.lineTo(-3.81469727e-06f, 1081);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_tunero_de_24(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1020.79303f, 2252);
    path.quadTo(1018.72198f, 2252, 1016.86798f, 2253.46436f);
    path.quadTo(1015.02032f, 2254.92383f, 1014.4668f, 2256.98584f);
    path.lineTo(1014.46301f, 2257);
    path.lineTo(1011.53705f, 2268);
    path.quadTo(1010.98615f, 2270.07104f, 1012.06104f, 2271.53564f);
    path.quadTo(1013.13599f, 2273, 1015.20703f, 2273);
    path.lineTo(1083.20703f, 2273);
    path.quadTo(1085.27808f, 2273, 1087.13208f, 2271.53564f);
    path.quadTo(1088.97144f, 2270.08252f, 1089.52832f, 2268.03271f);
    path.lineTo(1089.53711f, 2268);
    path.lineTo(1092.46301f, 2257);
    path.lineTo(1092.4679f, 2256.98145f);
    path.quadTo(1093.00916f, 2254.92236f, 1091.93909f, 2253.46436f);
    path.quadTo(1090.86414f, 2252, 1088.79297f, 2252);
    path.lineTo(1020.79303f, 2252);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1011.53705f, 2268);
    pathB.lineTo(1014.46301f, 2257);
    pathB.quadTo(1015.01392f, 2254.92896f, 1016.86798f, 2253.46436f);
    pathB.quadTo(1018.72198f, 2252, 1020.79303f, 2252);
    pathB.lineTo(1088.79297f, 2252);
    pathB.quadTo(1090.86414f, 2252, 1091.93909f, 2253.46436f);
    pathB.quadTo(1093.01392f, 2254.92896f, 1092.46301f, 2257);
    pathB.lineTo(1089.53711f, 2268);
    pathB.quadTo(1088.98608f, 2270.07104f, 1087.13208f, 2271.53564f);
    pathB.quadTo(1085.27808f, 2273, 1083.20703f, 2273);
    pathB.lineTo(1015.20703f, 2273);
    pathB.quadTo(1013.13599f, 2273, 1012.06104f, 2271.53564f);
    pathB.quadTo(1010.98615f, 2270.07104f, 1011.53705f, 2268);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_docgelo_com_66(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(22.5f, 24174.5f);
    path.lineTo(185.5f, 24174.498f);
    path.lineTo(185.5f, 24174.75f);
    path.lineTo(22.5f, 24174.75f);
    path.lineTo(22.5f, 24174.5f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(22.5f, 24174.75f);
    pathB.lineTo(22.5f, 24174.498f);
    pathB.lineTo(185.5f, 24174.5f);
    pathB.lineTo(185.5f, 24174.75f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_kpopexplorer_net_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 866.329346f);
    path.quadTo(998, 869.250427f, 998, 873);
    path.lineTo(998, 874);
    path.quadTo(998, 877.749573f, 1000, 880.670654f);
    path.lineTo(1000, 866.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 874);
    pathB.lineTo(998, 873);
    pathB.quadTo(998, 868.029419f, 1001.51471f, 864.514709f);
    pathB.quadTo(1005.02942f, 861, 1010, 861);
    pathB.lineTo(1011, 861);
    pathB.quadTo(1015.14215f, 861, 1018.07104f, 864.514709f);
    pathB.quadTo(1021, 868.029419f, 1021, 873);
    pathB.lineTo(1021, 874);
    pathB.quadTo(1021, 878.142151f, 1018.07104f, 881.071045f);
    pathB.quadTo(1015.14215f, 884, 1011, 884);
    pathB.lineTo(1010, 884);
    pathB.quadTo(1005.02942f, 884, 1001.51471f, 881.071045f);
    pathB.quadTo(998, 878.142151f, 998, 874);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

static void skpwww_artblart_com_8(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(22.5f, 24527.25f);
    path.lineTo(45, 24527.248f);
    path.lineTo(45, 24527.5f);
    path.lineTo(22.5f, 24527.5f);
    path.lineTo(22.5f, 24527.25f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(22.5f, 24527.5f);
    pathB.lineTo(22.5f, 24527.248f);
    pathB.lineTo(45, 24527.25f);
    pathB.lineTo(45, 24527.5f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// joinCoincidence / findT / assert
static void skpwww_jessicaslens_wordpress_com_222(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 844.329346f);
    path.quadTo(998, 847.250427f, 998, 851);
    path.lineTo(998, 852);
    path.quadTo(998, 855.749573f, 1000, 858.670654f);
    path.lineTo(1000, 844.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 852);
    pathB.lineTo(998, 851);
    pathB.quadTo(998, 846.029419f, 1001.51471f, 842.514709f);
    pathB.quadTo(1005.02942f, 839, 1010, 839);
    pathB.lineTo(1011, 839);
    pathB.quadTo(1015.14215f, 839, 1018.07104f, 842.514709f);
    pathB.quadTo(1021, 846.029419f, 1021, 851);
    pathB.lineTo(1021, 852);
    pathB.quadTo(1021, 856.142151f, 1018.07104f, 859.071045f);
    pathB.quadTo(1015.14215f, 862, 1011, 862);
    pathB.lineTo(1010, 862);
    pathB.quadTo(1005.02942f, 862, 1001.51471f, 859.071045f);
    pathB.quadTo(998, 856.142151f, 998, 852);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// joinCoincidence / findT / assert
static void skpwww_simplysaru_com_40(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 866.329346f);
    path.quadTo(998, 869.250427f, 998, 873);
    path.lineTo(998, 874);
    path.quadTo(998, 877.749573f, 1000, 880.670654f);
    path.lineTo(1000, 866.329346f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998, 874);
    pathB.lineTo(998, 873);
    pathB.quadTo(998, 868.029419f, 1001.51471f, 864.514709f);
    pathB.quadTo(1005.02942f, 861, 1010, 861);
    pathB.lineTo(1011, 861);
    pathB.quadTo(1015.14215f, 861, 1018.07104f, 864.514709f);
    pathB.quadTo(1021, 868.029419f, 1021, 873);
    pathB.lineTo(1021, 874);
    pathB.quadTo(1021, 878.142151f, 1018.07104f, 881.071045f);
    pathB.quadTo(1015.14215f, 884, 1011, 884);
    pathB.lineTo(1010, 884);
    pathB.quadTo(1005.02942f, 884, 1001.51471f, 881.071045f);
    pathB.quadTo(998, 878.142151f, 998, 874);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// cubic-cubic intersection reduce checkLinear assert
static void skpwww_partsdata_de_53(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(407, 119);
    path.lineTo(407, 28);
    path.lineTo(647, 28);
    path.lineTo(647, 119);
    path.lineTo(407, 119);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(471.228394f, 64.443222f);
    pathB.cubicTo(471.193878f, 60.953373f, 470.234985f, 52.4797592f, 462.201569f, 46.6231461f);
    pathB.cubicTo(454.168152f, 40.7665405f, 446.592804f, 41.993145f, 443.033936f, 42.8568878f);
    pathB.cubicTo(439.475098f, 43.7206268f, 436.978638f, 45.4052658f, 436.304871f, 45.7851906f);
    pathB.cubicTo(435.631104f, 46.1651154f, 435.156006f, 45.8026352f, 434.957306f, 45.6384506f);
    pathB.cubicTo(434.758636f, 45.4742737f, 431.460999f, 42.0105858f, 430.916901f, 41.4664841f);
    pathB.cubicTo(430.372803f, 40.9223785f, 429.731628f, 41.3303604f, 429.375214f, 41.6996689f);
    pathB.cubicTo(429.375214f, 41.6996689f, 420.610016f, 50.5190887f, 419.918793f, 51.1754227f);
    pathB.cubicTo(419.22757f, 51.8321419f, 419.331482f, 52.2465706f, 419.884308f, 52.8339005f);
    pathB.cubicTo(420.437134f, 53.4212303f, 425.170624f, 58.0167313f, 425.619568f, 58.4660416f);
    pathB.cubicTo(426.068512f, 58.9153557f, 426.137878f, 59.2952805f, 426.137878f, 59.8136024f);
    pathB.cubicTo(426.137878f, 60.3319244f, 426.103394f, 103.141357f, 426.103394f, 103.970215f);
    pathB.cubicTo(426.103394f, 104.799835f, 426.310791f, 105.525177f, 427.17453f, 105.525177f);
    pathB.cubicTo(428.038269f, 105.525177f, 440.131409f, 105.491432f, 440.85675f, 105.491432f);
    pathB.cubicTo(441.582489f, 105.491432f, 441.996918f, 104.903343f, 441.996918f, 104.17762f);
    pathB.cubicTo(441.996918f, 103.452271f, 441.996918f, 89.5622559f, 441.996918f, 87.8002701f);
    pathB.cubicTo(441.996918f, 86.0382843f, 442.342712f, 86.2453079f, 442.826141f, 86.3491974f);
    pathB.cubicTo(443.309601f, 86.4530945f, 445.832184f, 87.040802f, 448.700195f, 87.040802f);
    pathB.cubicTo(466.87442f, 86.6949997f, 471.815338f, 69.4876556f, 471.228394f, 64.443222f);
    pathB.close();
    pathB.moveTo(448.873108f, 72.4595642f);
    pathB.cubicTo(444.636658f, 72.4595642f, 441.202545f, 69.0254517f, 441.202545f, 64.7890244f);
    pathB.cubicTo(441.202545f, 60.5525932f, 444.636658f, 57.1184845f, 448.873108f, 57.1184845f);
    pathB.cubicTo(453.109528f, 57.1184845f, 456.54364f, 60.552597f, 456.54364f, 64.7890244f);
    pathB.cubicTo(456.54364f, 69.0254517f, 453.109528f, 72.4595642f, 448.873108f, 72.4595642f);
    pathB.close();
    pathB.moveTo(520.242859f, 82.5275803f);
    pathB.cubicTo(519.733276f, 81.6547394f, 494.845154f, 41.3379478f, 494.263123f, 40.3923073f);
    pathB.cubicTo(493.681122f, 39.4462852f, 493.244324f, 39.5918846f, 492.807495f, 40.3195038f);
    pathB.cubicTo(492.515167f, 40.8071136f, 467.238037f, 81.6790085f, 466.528625f, 82.8373566f);
    pathB.cubicTo(465.819183f, 83.9945831f, 466.497528f, 84.2975311f, 466.904358f, 84.5792542f);
    pathB.cubicTo(466.904358f, 84.5792542f, 477.399689f, 91.2036743f, 478.235748f, 91.6981049f);
    pathB.cubicTo(479.071838f, 92.1929092f, 479.396393f, 91.9028473f, 479.669403f, 91.5104141f);
    pathB.cubicTo(479.942383f, 91.1175995f, 484.106384f, 84.1549606f, 484.481781f, 83.5570221f);
    pathB.cubicTo(484.857147f, 82.9602051f, 485.198792f, 82.8741379f, 485.966583f, 82.8741379f);
    pathB.cubicTo(486.734406f, 82.8741379f, 499.635925f, 82.8062668f, 500.830322f, 82.8062668f);
    pathB.cubicTo(502.024658f, 82.8062668f, 502.229797f, 83.4038391f, 502.400452f, 83.6427078f);
    pathB.cubicTo(502.571045f, 83.8815842f, 506.615631f, 90.7414703f, 506.990997f, 91.2870865f);
    pathB.cubicTo(507.651123f, 92.2475128f, 508.017395f, 92.1333847f, 508.672241f, 91.6962051f);
    pathB.cubicTo(509.327423f, 91.2597809f, 519.442444f, 85.0744324f, 520.243286f, 84.4920349f);
    pathB.cubicTo(521.042908f, 83.9100189f, 520.751709f, 83.4004211f, 520.242859f, 82.5275803f);
    pathB.close();
    pathB.moveTo(493.720551f, 72.4811783f);
    pathB.cubicTo(491.265442f, 72.4811783f, 489.275574f, 70.4905548f, 489.275574f, 68.0362091f);
    pathB.cubicTo(489.275574f, 65.5811005f, 491.265808f, 63.5912399f, 493.720551f, 63.5912399f);
    pathB.cubicTo(496.175262f, 63.5912399f, 498.165527f, 65.5814819f, 498.165527f, 68.0362091f);
    pathB.cubicTo(498.165894f, 70.4905548f, 496.175659f, 72.4811783f, 493.720551f, 72.4811783f);
    pathB.close();
    pathB.moveTo(526.561707f, 42.132679f);
    pathB.cubicTo(526.876404f, 41.786499f, 527.537292f, 41.1881752f, 528.512878f, 42.1956215f);
    pathB.cubicTo(529.488892f, 43.2030678f, 531.691833f, 45.2486725f, 531.881042f, 45.4693451f);
    pathB.cubicTo(532.07019f, 45.6896439f, 532.762939f, 46.2875862f, 533.517883f, 45.7525826f);
    pathB.cubicTo(534.272827f, 45.2172012f, 539.497681f, 41.9753265f, 545.384277f, 42.132679f);
    pathB.cubicTo(546.203247f, 42.2270889f, 546.580566f, 42.5421791f, 546.612f, 43.8324814f);
    pathB.cubicTo(546.643494f, 45.1227837f, 546.674561f, 55.1957283f, 546.612f, 56.2657356f);
    pathB.cubicTo(546.549072f, 57.3361206f, 546.549072f, 57.7452469f, 544.975525f, 57.8396568f);
    pathB.cubicTo(543.401978f, 57.9340706f, 538.742798f, 59.5709305f, 538.774658f, 64.6070251f);
    pathB.cubicTo(538.806458f, 69.6431122f, 538.806091f, 86.2631226f, 538.806091f, 86.9554901f);
    pathB.cubicTo(538.806091f, 87.6478424f, 538.585815f, 88.4349976f, 537.484314f, 88.4349976f);
    pathB.cubicTo(536.382446f, 88.4349976f, 524.79895f, 88.4031372f, 524.04364f, 88.4031372f);
    pathB.cubicTo(523.287964f, 88.4031372f, 522.910706f, 88.3402023f, 522.910706f, 86.8606949f);
    pathB.cubicTo(522.910706f, 85.3823242f, 522.910706f, 60.6094704f, 522.910706f, 60.0740852f);
    pathB.cubicTo(522.910706f, 59.5387039f, 522.81665f, 58.9092865f, 522.470093f, 58.6260452f);
    pathB.cubicTo(522.123901f, 58.3428116f, 517.465088f, 53.621048f, 517.181885f, 53.3378105f);
    pathB.cubicTo(516.898621f, 53.0545731f, 516.300659f, 52.330368f, 517.213318f, 51.5121231f);
    pathB.cubicTo(518.125977f, 50.6942635f, 526.561707f, 42.132679f, 526.561707f, 42.132679f);
    pathB.close();
    pathB.moveTo(550.169006f, 43.7373123f);
    pathB.cubicTo(550.169006f, 42.6358337f, 550.767334f, 42.2263336f, 551.49115f, 42.2263336f);
    pathB.cubicTo(552.214966f, 42.2263336f, 552.781433f, 42.2263336f, 552.938843f, 42.2263336f);
    pathB.cubicTo(553.096191f, 42.2263336f, 553.725586f, 41.8801537f, 553.662598f, 41.124855f);
    pathB.cubicTo(553.600098f, 40.369175f, 553.662598f, 31.4614124f, 553.662598f, 30.8005257f);
    pathB.cubicTo(553.662598f, 30.1396389f, 553.75708f, 29.1951332f, 555.110657f, 29.1951332f);
    pathB.cubicTo(556.463928f, 29.1951332f, 566.536865f, 29.1951332f, 567.859009f, 29.1951332f);
    pathB.cubicTo(569.180786f, 29.1951332f, 569.463623f, 30.1711082f, 569.463623f, 30.7690544f);
    pathB.cubicTo(569.463623f, 31.3670006f, 569.463623f, 40.2122002f, 569.463623f, 41.0619125f);
    pathB.cubicTo(569.463623f, 41.9116249f, 569.746887f, 42.3207474f, 570.659912f, 42.3207474f);
    pathB.cubicTo(571.572571f, 42.3207474f, 575.507568f, 42.2263336f, 576.199951f, 42.2263336f);
    pathB.cubicTo(576.892273f, 42.2263336f, 577.742004f, 42.5725098f, 577.742004f, 43.8631973f);
    pathB.cubicTo(577.742004f, 45.1538811f, 577.742004f, 55.8877106f, 577.742004f, 56.5800705f);
    pathB.cubicTo(577.742004f, 57.2724266f, 577.616455f, 58.0595779f, 576.45166f, 58.0595779f);
    pathB.cubicTo(575.286865f, 58.0595779f, 570.943115f, 58.0595779f, 570.471069f, 58.0595779f);
    pathB.cubicTo(569.999023f, 58.0595779f, 569.479919f, 57.8389015f, 569.479919f, 59.0510979f);
    pathB.cubicTo(569.479919f, 60.2629128f, 569.479919f, 66.2124176f, 569.479919f, 67.1880188f);
    pathB.cubicTo(569.479919f, 68.1636047f, 570.628418f, 73.6406708f, 575.917053f, 73.6406708f);
    pathB.cubicTo(577.018921f, 73.6406708f, 577.742737f, 73.9242859f, 577.742737f, 75.4348907f);
    pathB.cubicTo(577.742737f, 76.945488f, 577.742737f, 87.0813751f, 577.742737f, 87.8366699f);
    pathB.cubicTo(577.742737f, 88.5915909f, 577.648315f, 89.4416809f, 576.295044f, 89.4416809f);
    pathB.cubicTo(574.028809f, 89.6312714f, 553.978088f, 88.0254974f, 553.631897f, 65.928421f);
    pathB.cubicTo(553.631897f, 65.928421f, 553.631897f, 59.6964378f, 553.631897f, 58.972229f);
    pathB.cubicTo(553.631897f, 58.2484055f, 553.034363f, 58.0436554f, 552.703735f, 58.0436554f);
    pathB.cubicTo(552.372681f, 58.0436554f, 551.522949f, 58.0436554f, 551.208252f, 58.0436554f);
    pathB.cubicTo(550.893921f, 58.0436554f, 550.170105f, 58.0906677f, 550.170105f, 56.6115417f);
    pathB.cubicTo(550.170105f, 55.1324081f, 550.169006f, 43.7373123f, 550.169006f, 43.7373123f);
    pathB.close();
    pathB.moveTo(611.203857f, 39.5509338f);
    pathB.cubicTo(612.084961f, 39.5509338f, 612.620422f, 40.0544662f, 612.620422f, 40.8097687f);
    pathB.cubicTo(612.620422f, 41.5650673f, 612.620422f, 53.1486092f, 612.620422f, 53.6839905f);
    pathB.cubicTo(612.620422f, 54.2193718f, 612.651489f, 55.2264404f, 611.612976f, 55.2264404f);
    pathB.cubicTo(610.574463f, 55.2264404f, 604.404663f, 55.9817429f, 604.404663f, 61.899395f);
    pathB.cubicTo(604.404663f, 65.4878235f, 604.373169f, 66.6211548f, 604.373169f, 67.5338135f);
    pathB.cubicTo(604.373169f, 68.0684357f, 604.414124f, 74.3353043f, 599.934631f, 80.4702148f);
    pathB.cubicTo(596.765564f, 84.8109131f, 590.664368f, 89.3942871f, 582.150208f, 89.630127f);
    pathB.cubicTo(580.028015f, 89.630127f, 580.230469f, 88.5286484f, 580.230469f, 88.1820908f);
    pathB.cubicTo(580.230469f, 87.5845184f, 580.198975f, 75.8436279f, 580.198975f, 75.2142105f);
    pathB.cubicTo(580.198975f, 74.5844116f, 580.608154f, 73.8605804f, 581.58374f, 73.8605804f);
    pathB.cubicTo(583.40979f, 73.8605804f, 588.603271f, 72.7905731f, 588.603271f, 66.9043884f);
    pathB.cubicTo(588.603271f, 61.3958588f, 588.603271f, 61.8679237f, 588.603271f, 61.0496788f);
    pathB.cubicTo(588.603271f, 60.2314377f, 588.666565f, 54.3137856f, 593.230591f, 48.3961296f);
    pathB.cubicTo(597.794617f, 42.4784775f, 604.814087f, 39.5509338f, 611.203857f, 39.5509338f);
    pathB.close();
    pathB.moveTo(635.22937f, 81.9311447f);
    pathB.cubicTo(635.057617f, 81.6475296f, 634.869141f, 81.3851471f, 634.664429f, 81.1439972f);
    pathB.lineTo(635.039001f, 81.0385895f);
    pathB.cubicTo(635.447754f, 80.9233246f, 635.729858f, 80.5509796f, 635.729858f, 80.1263123f);
    pathB.lineTo(635.729858f, 78.6149597f);
    pathB.cubicTo(635.729858f, 78.3309631f, 635.602417f, 78.0617523f, 635.382935f, 77.8816452f);
    pathB.cubicTo(635.162598f, 77.7015381f, 634.873291f, 77.6295013f, 634.595764f, 77.6852341f);
    pathB.cubicTo(633.906799f, 77.8232498f, 633.194397f, 77.9017334f, 632.478149f, 77.9191818f);
    pathB.cubicTo(631.714844f, 77.9373779f, 630.851501f, 77.9464874f, 629.911133f, 77.9464874f);
    pathB.lineTo(615.131226f, 77.9464874f);
    pathB.cubicTo(614.607605f, 77.9464874f, 614.18335f, 78.3707733f, 614.18335f, 78.8944016f);
    pathB.lineTo(614.18335f, 81.1337585f);
    pathB.cubicTo(614.18335f, 81.6573868f, 614.607605f, 82.0816803f, 615.131226f, 82.0816803f);
    pathB.lineTo(619.693787f, 82.0816803f);
    pathB.cubicTo(619.680908f, 82.1423492f, 619.669128f, 82.2026367f, 619.657776f, 82.2629166f);
    pathB.cubicTo(619.571289f, 82.728157f, 619.529602f, 83.3200302f, 619.529602f, 84.0730591f);
    pathB.cubicTo(619.529602f, 86.3196259f, 620.260254f, 88.1236954f, 621.701477f, 89.4348602f);
    pathB.cubicTo(623.116516f, 90.7225037f, 625.163269f, 91.3754272f, 627.784058f, 91.3754272f);
    pathB.cubicTo(630.525024f, 91.3754272f, 632.517944f, 90.8669662f, 633.876099f, 89.8208466f);
    pathB.cubicTo(635.291565f, 88.7314987f, 636.009705f, 87.0798492f, 636.009705f, 84.9129181f);
    pathB.cubicTo(636.010071f, 83.7905807f, 635.747314f, 82.7873077f, 635.22937f, 81.9311447f);
    pathB.close();
    pathB.moveTo(631.880554f, 85.7326736f);
    pathB.cubicTo(631.690552f, 86.0545807f, 631.436157f, 86.307869f, 631.102844f, 86.5076904f);
    pathB.cubicTo(630.736206f, 86.7279816f, 630.277039f, 86.8906479f, 629.737854f, 86.9903717f);
    pathB.cubicTo(629.146362f, 87.1003265f, 628.488892f, 87.1564484f, 627.783997f, 87.1564484f);
    pathB.cubicTo(626.159668f, 87.1564484f, 624.996399f, 86.8656235f, 624.327881f, 86.293457f);
    pathB.cubicTo(623.693604f, 85.7489777f, 623.385315f, 84.995575f, 623.385315f, 83.9896393f);
    pathB.cubicTo(623.385315f, 83.3655396f, 623.431519f, 82.8718567f, 623.522583f, 82.5215149f);
    pathB.cubicTo(623.563477f, 82.3645325f, 623.616943f, 82.2189331f, 623.684448f, 82.0824356f);
    pathB.lineTo(630.008179f, 82.0824356f);
    pathB.cubicTo(630.758911f, 82.247757f, 631.311401f, 82.5256805f, 631.650757f, 82.9101562f);
    pathB.cubicTo(631.990112f, 83.2942505f, 632.154663f, 83.8303986f, 632.154663f, 84.549675f);
    pathB.cubicTo(632.154663f, 85.02742f, 632.062927f, 85.4251709f, 631.880554f, 85.7326736f);
    pathB.close();
    pathB.moveTo(635.667664f, 69.5979919f);
    pathB.cubicTo(635.518311f, 69.0645142f, 635.325684f, 68.5818329f, 635.093994f, 68.1620941f);
    pathB.cubicTo(634.940796f, 67.8856812f, 634.770569f, 67.6316376f, 634.586304f, 67.4026184f);
    pathB.lineTo(635.054565f, 67.2619476f);
    pathB.cubicTo(635.455322f, 67.1417542f, 635.729858f, 66.7724457f, 635.729858f, 66.3538437f);
    pathB.lineTo(635.729858f, 64.7021942f);
    pathB.cubicTo(635.729858f, 64.4045486f, 635.590332f, 64.1243439f, 635.3526f, 63.9449997f);
    pathB.cubicTo(635.115234f, 63.7660294f, 634.807373f, 63.7087784f, 634.521057f, 63.7906761f);
    pathB.cubicTo(634.059998f, 63.9226265f, 633.544678f, 64.0155258f, 632.988831f, 64.0659485f);
    pathB.cubicTo(631.578735f, 64.1941071f, 629.921387f, 64.1565704f, 628.141968f, 64.0632935f);
    pathB.cubicTo(627.067383f, 64.0068054f, 625.948853f, 63.9779854f, 624.81665f, 63.9779854f);
    pathB.cubicTo(624.253601f, 63.9779854f, 623.681396f, 64.0359955f, 623.116089f, 64.1512604f);
    pathB.cubicTo(622.479126f, 64.2809448f, 621.888367f, 64.5437012f, 621.35907f, 64.9315872f);
    pathB.cubicTo(620.807007f, 65.3365402f, 620.360352f, 65.9159088f, 620.031189f, 66.6548996f);
    pathB.cubicTo(619.712708f, 67.3722839f, 619.557983f, 68.2625656f, 619.557983f, 69.3769379f);
    pathB.cubicTo(619.557983f, 70.4655304f, 619.669128f, 71.5268097f, 619.887878f, 72.5323639f);
    pathB.cubicTo(620.11499f, 73.573555f, 620.473694f, 74.5040283f, 620.954468f, 75.2983856f);
    pathB.cubicTo(621.196411f, 75.6976471f, 621.693481f, 75.861824f, 622.124939f, 75.6847534f);
    pathB.lineTo(623.832336f, 74.9851913f);
    pathB.cubicTo(624.086365f, 74.8809204f, 624.282776f, 74.6716156f, 624.370728f, 74.4111328f);
    pathB.cubicTo(624.45874f, 74.15065f, 624.429138f, 73.8651276f, 624.290405f, 73.6281509f);
    pathB.cubicTo(624.166382f, 73.416954f, 624.051147f, 73.1644287f, 623.947205f, 72.875885f);
    pathB.cubicTo(623.836853f, 72.5702744f, 623.741333f, 72.2407837f, 623.663574f, 71.8968811f);
    pathB.cubicTo(623.584717f, 71.549942f, 623.522217f, 71.2018585f, 623.477417f, 70.8621292f);
    pathB.cubicTo(623.434937f, 70.5409775f, 623.41333f, 70.2391663f, 623.41333f, 69.9646454f);
    pathB.cubicTo(623.41333f, 68.8229752f, 623.672729f, 68.4748993f, 623.75116f, 68.3960266f);
    pathB.cubicTo(623.853577f, 68.2940369f, 624.20166f, 68.0574341f, 625.236755f, 68.0574341f);
    pathB.cubicTo(625.39679f, 68.0574341f, 625.566284f, 68.0616074f, 625.744446f, 68.0695648f);
    pathB.lineTo(625.744446f, 68.7331085f);
    pathB.cubicTo(625.744446f, 69.8065338f, 625.819153f, 70.8048782f, 625.967041f, 71.70047f);
    pathB.cubicTo(626.12323f, 72.6483841f, 626.392456f, 73.4825516f, 626.767456f, 74.1794586f);
    pathB.cubicTo(627.173523f, 74.9328613f, 627.730957f, 75.5292969f, 628.424438f, 75.9528198f);
    pathB.cubicTo(629.123596f, 76.3790054f, 629.981628f, 76.5951309f, 630.975464f, 76.5951309f);
    pathB.cubicTo(631.722046f, 76.5951309f, 632.406799f, 76.4597626f, 633.009644f, 76.1924591f);
    pathB.cubicTo(633.611816f, 75.9262848f, 634.136536f, 75.5543213f, 634.567688f, 75.0875626f);
    pathB.cubicTo(634.998779f, 74.6223297f, 635.333191f, 74.0672302f, 635.561096f, 73.4370575f);
    pathB.cubicTo(635.78479f, 72.8212891f, 635.898193f, 72.1520538f, 635.898193f, 71.4479446f);
    pathB.cubicTo(635.898193f, 70.7688599f, 635.820496f, 70.1462708f, 635.667664f, 69.5979919f);
    pathB.close();
    pathB.moveTo(631.656494f, 71.9905396f);
    pathB.cubicTo(631.416077f, 72.2574692f, 631.13739f, 72.3765259f, 630.751404f, 72.3765259f);
    pathB.cubicTo(630.390015f, 72.3765259f, 630.239502f, 72.2536774f, 630.190247f, 72.2127228f);
    pathB.cubicTo(630.002197f, 72.0587845f, 629.853149f, 71.8483429f, 629.735596f, 71.5704193f);
    pathB.cubicTo(629.594177f, 71.2348557f, 629.494507f, 70.8310394f, 629.439453f, 70.3714905f);
    pathB.cubicTo(629.379211f, 69.8607559f, 629.348511f, 69.3284073f, 629.348511f, 68.7892303f);
    pathB.cubicTo(629.348511f, 68.5765228f, 629.351929f, 68.3603973f, 629.357971f, 68.1416168f);
    pathB.lineTo(630.581177f, 68.1416168f);
    pathB.cubicTo(630.702515f, 68.2026672f, 630.831787f, 68.2841797f, 630.967163f, 68.3857956f);
    pathB.cubicTo(631.149902f, 68.523056f, 631.322815f, 68.703537f, 631.480225f, 68.922699f);
    pathB.cubicTo(631.639038f, 69.1437531f, 631.77478f, 69.4186478f, 631.884399f, 69.7390442f);
    pathB.cubicTo(631.989807f, 70.0488281f, 632.04364f, 70.4169922f, 632.04364f, 70.8329391f);
    pathB.cubicTo(632.042847f, 71.3228302f, 631.916565f, 71.7012329f, 631.656494f, 71.9905396f);
    pathB.close();
    pathB.moveTo(622.689575f, 63.4953079f);
    pathB.lineTo(620.72998f, 63.4953079f);
    pathB.cubicTo(620.206421f, 63.4953079f, 619.782104f, 63.0710182f, 619.782104f, 62.54739f);
    pathB.lineTo(619.782104f, 61.3116837f);
    pathB.lineTo(617.958679f, 61.3116837f);
    pathB.cubicTo(617.536255f, 61.3116837f, 617.164307f, 61.0318604f, 617.047913f, 60.6257744f);
    pathB.lineTo(616.404114f, 58.3864136f);
    pathB.cubicTo(616.321411f, 58.1001472f, 616.378662f, 57.7922592f, 616.557678f, 57.5541458f);
    pathB.cubicTo(616.737061f, 57.3164062f, 617.017212f, 57.1764946f, 617.31488f, 57.1764946f);
    pathB.lineTo(619.782104f, 57.1764946f);
    pathB.lineTo(619.782104f, 54.3171997f);
    pathB.cubicTo(619.782104f, 53.7935715f, 620.206421f, 53.3692818f, 620.730042f, 53.3692818f);
    pathB.lineTo(622.689575f, 53.3692818f);
    pathB.cubicTo(623.213196f, 53.3692818f, 623.637512f, 53.7935715f, 623.637512f, 54.3171997f);
    pathB.lineTo(623.637512f, 57.1764946f);
    pathB.lineTo(630.443176f, 57.1764946f);
    pathB.cubicTo(631.548828f, 57.1764946f, 631.921936f, 57.0028381f, 632.009888f, 56.9493713f);
    pathB.cubicTo(632.057617f, 56.9205589f, 632.154724f, 56.8621674f, 632.154724f, 56.5288773f);
    pathB.cubicTo(632.154724f, 56.139473f, 632.116821f, 55.8179398f, 632.04248f, 55.5737572f);
    pathB.cubicTo(631.949219f, 55.268528f, 631.822205f, 54.9193192f, 631.665588f, 54.5363579f);
    pathB.cubicTo(631.563599f, 54.288002f, 631.572327f, 54.0085602f, 631.688354f, 53.7670288f);
    pathB.cubicTo(631.804749f, 53.5251198f, 632.017456f, 53.3438797f, 632.274536f, 53.2680435f);
    pathB.lineTo(633.9823f, 52.7641296f);
    pathB.cubicTo(634.430115f, 52.6325607f, 634.90332f, 52.8437576f, 635.105042f, 53.2623596f);
    pathB.cubicTo(635.375f, 53.8235245f, 635.59491f, 54.4404297f, 635.758301f, 55.0956268f);
    pathB.cubicTo(635.925537f, 55.7656174f, 636.010498f, 56.4928589f, 636.010498f, 57.2565002f);
    pathB.cubicTo(636.010498f, 58.7109833f, 635.553589f, 59.7790947f, 634.653076f, 60.4316406f);
    pathB.cubicTo(633.835938f, 61.0235176f, 632.596069f, 61.311306f, 630.863647f, 61.311306f);
    pathB.lineTo(623.637878f, 61.311306f);
    pathB.lineTo(623.637878f, 62.5470123f);
    pathB.cubicTo(623.637451f, 63.071022f, 623.213196f, 63.4953079f, 622.689575f, 63.4953079f);
    pathB.close();
    pathB.moveTo(635.667664f, 46.2246475f);
    pathB.cubicTo(635.518311f, 45.6911545f, 635.325684f, 45.2084808f, 635.093994f, 44.7887421f);
    pathB.cubicTo(634.940796f, 44.5123291f, 634.770569f, 44.2582855f, 634.586304f, 44.029274f);
    pathB.lineTo(635.054565f, 43.8886032f);
    pathB.cubicTo(635.455322f, 43.7684059f, 635.729858f, 43.3990974f, 635.729858f, 42.9804955f);
    pathB.lineTo(635.729858f, 41.328846f);
    pathB.cubicTo(635.729858f, 41.0312004f, 635.590332f, 40.7509995f, 635.3526f, 40.5716515f);
    pathB.cubicTo(635.115234f, 40.3926849f, 634.807373f, 40.3354301f, 634.521057f, 40.4173279f);
    pathB.cubicTo(634.059998f, 40.5492783f, 633.544678f, 40.6421738f, 632.988831f, 40.6926041f);
    pathB.cubicTo(631.578735f, 40.8207626f, 629.921387f, 40.7836075f, 628.141968f, 40.689949f);
    pathB.cubicTo(627.067383f, 40.6334534f, 625.948853f, 40.6046371f, 624.81665f, 40.6046371f);
    pathB.cubicTo(624.253601f, 40.6046371f, 623.681396f, 40.6626511f, 623.116089f, 40.777916f);
    pathB.cubicTo(622.479126f, 40.9075928f, 621.888367f, 41.1703568f, 621.35907f, 41.5582428f);
    pathB.cubicTo(620.807007f, 41.963192f, 620.360352f, 42.5425606f, 620.031189f, 43.2815552f);
    pathB.cubicTo(619.712708f, 43.9989395f, 619.557983f, 44.8892212f, 619.557983f, 46.0035934f);
    pathB.cubicTo(619.557983f, 47.0921783f, 619.669128f, 48.1534653f, 619.887878f, 49.1590195f);
    pathB.cubicTo(620.11499f, 50.2002106f, 620.473694f, 51.1306839f, 620.954468f, 51.9250374f);
    pathB.cubicTo(621.196411f, 52.3243027f, 621.693481f, 52.4880981f, 622.124939f, 52.311409f);
    pathB.lineTo(623.832336f, 51.6118431f);
    pathB.cubicTo(624.086365f, 51.5075722f, 624.282776f, 51.2982712f, 624.370728f, 51.0377846f);
    pathB.cubicTo(624.45874f, 50.777298f, 624.429138f, 50.4917831f, 624.290405f, 50.2548065f);
    pathB.cubicTo(624.166382f, 50.0436096f, 624.051147f, 49.7910843f, 623.947205f, 49.5025406f);
    pathB.cubicTo(623.836853f, 49.1969299f, 623.741333f, 48.8674355f, 623.663574f, 48.5235291f);
    pathB.cubicTo(623.584717f, 48.1765938f, 623.522217f, 47.8285179f, 623.477417f, 47.4887848f);
    pathB.cubicTo(623.434937f, 47.1676331f, 623.41333f, 46.8658142f, 623.41333f, 46.5912971f);
    pathB.cubicTo(623.41333f, 45.4496269f, 623.672729f, 45.1015511f, 623.75116f, 45.0226822f);
    pathB.cubicTo(623.853577f, 44.9206886f, 624.20166f, 44.6840897f, 625.236755f, 44.6840897f);
    pathB.cubicTo(625.39679f, 44.6840897f, 625.566284f, 44.6882591f, 625.744446f, 44.6962204f);
    pathB.lineTo(625.744446f, 45.3597641f);
    pathB.cubicTo(625.744446f, 46.4331856f, 625.819153f, 47.43153f, 625.967041f, 48.3271217f);
    pathB.cubicTo(626.12323f, 49.2750397f, 626.392456f, 50.1092072f, 626.767456f, 50.8061142f);
    pathB.cubicTo(627.173523f, 51.5595169f, 627.730957f, 52.1559486f, 628.424438f, 52.5794754f);
    pathB.cubicTo(629.123596f, 53.005661f, 629.981628f, 53.2217865f, 630.975464f, 53.2217865f);
    pathB.cubicTo(631.722046f, 53.2217865f, 632.406799f, 53.086422f, 633.009644f, 52.8191147f);
    pathB.cubicTo(633.611816f, 52.5529366f, 634.136536f, 52.1809769f, 634.567688f, 51.7142181f);
    pathB.cubicTo(634.998779f, 51.2489815f, 635.333191f, 50.693882f, 635.561096f, 50.0637054f);
    pathB.cubicTo(635.78479f, 49.4479408f, 635.898193f, 48.7787094f, 635.898193f, 48.0746002f);
    pathB.cubicTo(635.898193f, 47.3958893f, 635.820496f, 46.7733002f, 635.667664f, 46.2246475f);
    pathB.close();
    pathB.moveTo(631.656494f, 48.6171875f);
    pathB.cubicTo(631.416077f, 48.8841209f, 631.13739f, 49.0031815f, 630.751404f, 49.0031815f);
    pathB.cubicTo(630.390015f, 49.0031815f, 630.239502f, 48.8803291f, 630.190247f, 48.8393784f);
    pathB.cubicTo(630.002197f, 48.6854401f, 629.853149f, 48.4749985f, 629.735596f, 48.1970711f);
    pathB.cubicTo(629.594177f, 47.8615112f, 629.494507f, 47.457695f, 629.439453f, 46.9981461f);
    pathB.cubicTo(629.379211f, 46.4874115f, 629.348511f, 45.9550591f, 629.348511f, 45.4158859f);
    pathB.cubicTo(629.348511f, 45.2031708f, 629.351929f, 44.9870453f, 629.357971f, 44.7682648f);
    pathB.lineTo(630.581177f, 44.7682648f);
    pathB.cubicTo(630.702515f, 44.8293152f, 630.831787f, 44.9108353f, 630.967163f, 45.0124512f);
    pathB.cubicTo(631.149902f, 45.1497116f, 631.322815f, 45.3301926f, 631.480225f, 45.5493507f);
    pathB.cubicTo(631.639038f, 45.7704048f, 631.77478f, 46.0453033f, 631.884399f, 46.3656998f);
    pathB.cubicTo(631.989807f, 46.6754761f, 632.04364f, 47.0436478f, 632.04364f, 47.4595947f);
    pathB.cubicTo(632.042847f, 47.949852f, 631.916565f, 48.3282623f, 631.656494f, 48.6171875f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpAngle::setSector SkASSERT(fSectorStart >= 0);
static void skpwww_seopack_blogspot_com_2153(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(999.892212f, 246);
    path.lineTo(927.340759f, 245.505722f);
    path.quadTo(928.068054f, 246, 929, 246);
    path.lineTo(999.892212f, 246);
    path.close();
    path.moveTo(927.340759f, 245.505722f);
    path.lineTo(926.5f, 245.5f);
    path.lineTo(925.17157f, 246.82843f);
    path.quadTo(926.34314f, 248, 928, 248);
    path.lineTo(1000, 248);
    path.lineTo(1000, 246);
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(924, 248);
    pathB.lineTo(924, 245.472672f);
    pathB.lineTo(1143, 247);
    pathB.lineTo(1143, 248);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// joinCoincidence / findT / assert
static void skpwww_lokado_de_173(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 896.991394f);
    path.quadTo(999.789917f, 896.718872f, 999.535522f, 896.464478f);
    path.quadTo(998.071045f, 895, 996, 895);
    path.lineTo(956, 895);
    path.quadTo(951.857849f, 895, 948.928955f, 897.928955f);
    path.quadTo(946, 900.857849f, 946, 905);
    path.lineTo(946, 906);
    path.quadTo(946, 910.142151f, 948.928955f, 913.071045f);
    path.quadTo(951.857849f, 916, 956, 916);
    path.lineTo(996, 916);
    path.quadTo(998.071045f, 916, 999.535522f, 914.535522f);
    path.quadTo(999.789917f, 914.281128f, 1000, 914.008606f);
    path.lineTo(1000, 896.991394f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(946, 906);
    pathB.lineTo(946, 905);
    pathB.quadTo(946, 901.272095f, 948.928955f, 898.636047f);
    pathB.quadTo(951.857849f, 896, 956, 896);
    pathB.lineTo(996, 896);
    pathB.quadTo(998.071045f, 896, 999.535522f, 897.17157f);
    pathB.quadTo(1001, 898.34314f, 1001, 900);
    pathB.lineTo(1001, 911);
    pathB.quadTo(1001, 913.071045f, 999.535522f, 914.535522f);
    pathB.quadTo(998.071045f, 916, 996, 916);
    pathB.lineTo(956, 916);
    pathB.quadTo(951.857849f, 916, 948.928955f, 913.071045f);
    pathB.quadTo(946, 910.142151f, 946, 906);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// !simple->isClosed()
static void skpwww_wartepop_blogspot_com_br_6(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(90.9763107f, 153.309662f);
    path.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    path.lineTo(124.666664f, 152.333344f);
    path.quadTo(126.047379f, 152.333344f, 127.023689f, 153.309662f);
    path.quadTo(128, 154.285965f, 128, 155.666672f);
    path.lineTo(128, 163.666672f);
    path.lineTo(90, 163.666672f);
    path.lineTo(90, 155.666672f);
    path.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(90, 163.666672f);
    pathB.lineTo(90, 155.666672f);
    pathB.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    pathB.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    pathB.lineTo(124.666672f, 152.333344f);
    pathB.quadTo(125.909309f, 152.333344f, 126.787994f, 153.309662f);
    pathB.quadTo(127.666672f, 154.285965f, 127.666672f, 155.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

static void skpwww_wartepop_blogspot_com_br_6a(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(90.9763107f, 153.309662f);
    path.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    path.lineTo(124.666672f, 152.333344f);
    path.quadTo(126.047379f, 152.333344f, 127.023689f, 153.309662f);
    path.quadTo(128, 154.285965f, 128, 155.666672f);
    path.lineTo(128, 163.666672f);
    path.lineTo(90, 163.666672f);
    path.lineTo(90, 155.666672f);
    path.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(90, 163.666672f);
    pathB.lineTo(90, 155.666672f);
    pathB.quadTo(90, 154.285965f, 90.9763107f, 153.309662f);
    pathB.quadTo(91.9526215f, 152.333344f, 93.3333359f, 152.333344f);
    pathB.lineTo(124.666672f, 152.333344f);
    pathB.quadTo(125.909309f, 152.333344f, 126.787994f, 153.309662f);
    pathB.quadTo(127.666672f, 154.285965f, 127.666672f, 155.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(127.666672f, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.lineTo(90, 163.666672f);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// !simple->isClosed()
static void skpwww_odia_com_br_26(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(360.740479f, 741.040771f);
    path.quadTo(360.378967f, 741, 360, 741);
    path.quadTo(359.159821f, 741, 358.403076f, 741.200745f);
    path.quadTo(357.649658f, 741.415833f, 356.92746f, 741.846436f);
    path.quadTo(356.600769f, 742.041199f, 356.310211f, 742.262268f);
    path.quadTo(356.025513f, 742.489197f, 355.757355f, 742.757385f);
    path.quadTo(355.16394f, 743.350769f, 354.770874f, 744.027283f);
    path.quadTo(354.389618f, 744.71283f, 354.183258f, 745.528564f);
    path.quadTo(354.090027f, 745.897095f, 354.040833f, 746.259277f);
    path.quadTo(354, 746.621216f, 354, 747);
    path.quadTo(354, 747.839844f, 354.200653f, 748.596497f);
    path.quadTo(354.415771f, 749.35022f, 354.846466f, 750.072632f);
    path.quadTo(355.040741f, 750.398438f, 355.261444f, 750.688721f);
    path.quadTo(355.488861f, 750.974121f, 355.757355f, 751.242615f);
    path.quadTo(356.352142f, 751.837402f, 357.030304f, 752.230896f);
    path.quadTo(357.714539f, 752.610901f, 358.528564f, 752.816833f);
    path.quadTo(358.895294f, 752.909607f, 359.25528f, 752.95874f);
    path.quadTo(359.618896f, 753, 360, 753);
    path.quadTo(360.842285f, 753, 361.600952f, 752.798157f);
    path.quadTo(362.352386f, 752.583008f, 363.072601f, 752.153625f);
    path.quadTo(363.397339f, 751.960022f, 363.686829f, 751.740051f);
    path.quadTo(363.973297f, 751.511963f, 364.242645f, 751.242615f);
    path.quadTo(364.837799f, 750.647461f, 365.231354f, 749.968933f);
    path.quadTo(365.610992f, 749.285034f, 365.816803f, 748.471497f);
    path.quadTo(365.909668f, 748.104431f, 365.958832f, 747.743713f);
    path.quadTo(366, 747.380371f, 366, 747);
    path.quadTo(366, 746.158997f, 365.798767f, 745.401367f);
    path.quadTo(365.583618f, 744.648682f, 365.153595f, 743.927429f);
    path.quadTo(364.959442f, 743.601807f, 364.738678f, 743.311462f);
    path.quadTo(364.511108f, 743.025818f, 364.242645f, 742.757385f);
    path.quadTo(363.649017f, 742.163757f, 362.972168f, 741.770569f);
    path.quadTo(362.286835f, 741.389526f, 361.471497f, 741.183289f);
    path.quadTo(361.102509f, 741.089966f, 360.740479f, 741.040771f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(355.654724f, 739.711792f);
    pathB.lineTo(367.288269f, 742.654724f);
    pathB.lineTo(364.345337f, 754.288269f);
    pathB.lineTo(352.711792f, 751.345337f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_evolvehq_com_210(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(172, 972);
    path.quadTo(170.757355f, 972, 169.878677f, 972.878662f);
    path.quadTo(169, 973.757385f, 169, 975);
    path.lineTo(169, 1171);
    path.quadTo(169, 1172.24268f, 169.878677f, 1173.12134f);
    path.quadTo(170.757355f, 1174, 172, 1174);
    path.lineTo(308, 1174);
    path.quadTo(309.242645f, 1174, 310.121307f, 1173.12134f);
    path.quadTo(310.337311f, 1172.9054f, 310.5f, 1172.66772f);
    path.lineTo(310.5f, 973.332336f);
    path.quadTo(310.337219f, 973.094604f, 310.121307f, 972.878662f);
    path.quadTo(309.242645f, 972, 308, 972);
    path.lineTo(172, 972);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(170, 1171);
    pathB.lineTo(170, 975);
    pathB.quadTo(170, 974.17157f, 170.585785f, 973.585815f);
    pathB.quadTo(171.17157f, 973, 172, 973);
    pathB.lineTo(308, 973);
    pathB.quadTo(309.242645f, 973, 310.121307f, 973.585815f);
    pathB.quadTo(311, 974.17157f, 311, 975);
    pathB.lineTo(311, 1171);
    pathB.quadTo(311, 1172.24268f, 310.121307f, 1173.12134f);
    pathB.quadTo(309.242645f, 1174, 308, 1174);
    pathB.lineTo(172, 1174);
    pathB.quadTo(171.17157f, 1174, 170.585785f, 1173.12134f);
    pathB.quadTo(170, 1172.24268f, 170, 1171);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

// hangs
static void skpwww_catingueiraonline_com_352(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(443, 8292);
    path.lineTo(443, 8140);
    path.lineTo(444, 8140);
    path.lineTo(444.01001f, 8292);
    path.lineTo(443, 8292);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(443, 8140);
    pathB.lineTo(444.01001f, 8140);
    pathB.lineTo(444, 8292);
    pathB.lineTo(443, 8292);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// hangs
static void skpwww_galaxystwo_com_4(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(10105, 2510);
    path.lineTo(10123, 2509.98999f);
    path.lineTo(10123, 2511);
    path.lineTo(10105, 2511);
    path.lineTo(10105, 2510);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(10105, 2511);
    pathB.lineTo(10105, 2509.98999f);
    pathB.lineTo(10123, 2510);
    pathB.lineTo(10123, 2511);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_thaienews_blogspot_com_36(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(429.994995f, 6268);
    path.lineTo(430, 2187);
    path.lineTo(430.5f, 2187);
    path.lineTo(430.5f, 6268);
    path.lineTo(429.994995f, 6268);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(430.5f, 2187);
    pathB.lineTo(429.994995f, 2187);
    pathB.lineTo(430, 6268);
    pathB.lineTo(430.5f, 6268);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_fashionscandal_com_94(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(25.9107456f, 272.577423f);
    path.quadTo(26.1548233f, 272.333344f, 26.5000019f, 272.333344f);
    path.lineTo(131.166672f, 272.333344f);
    path.quadTo(131.511841f, 272.333344f, 131.75592f, 272.577423f);
    path.quadTo(132, 272.821503f, 132, 273.166687f);
    path.lineTo(132, 417.166656f);
    path.quadTo(132, 417.511841f, 131.75592f, 417.75592f);
    path.quadTo(131.511841f, 418, 131.166672f, 418);
    path.lineTo(26.5000019f, 418);
    path.quadTo(26.1548233f, 418, 25.9107456f, 417.75592f);
    path.quadTo(25.6666679f, 417.511841f, 25.6666679f, 417.166656f);
    path.lineTo(25.6666679f, 273.166687f);
    path.quadTo(25.6666679f, 272.821503f, 25.9107456f, 272.577423f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(25.833334f, 417.166656f);
    pathB.lineTo(25.833334f, 273.166656f);
    pathB.quadTo(25.833334f, 272.890533f, 26.0285969f, 272.695251f);
    pathB.quadTo(26.2238579f, 272.5f, 26.5f, 272.5f);
    pathB.lineTo(131.166672f, 272.5f);
    pathB.quadTo(131.442825f, 272.5f, 131.638077f, 272.695251f);
    pathB.quadTo(131.833344f, 272.890533f, 131.833344f, 273.166656f);
    pathB.lineTo(131.833344f, 417.166656f);
    pathB.quadTo(131.833344f, 417.511841f, 131.638077f, 417.75592f);
    pathB.quadTo(131.442825f, 418, 131.166672f, 418);
    pathB.lineTo(26.5f, 418);
    pathB.quadTo(26.2238579f, 418, 26.0285969f, 417.75592f);
    pathB.quadTo(25.833334f, 417.511841f, 25.833334f, 417.166656f);
    pathB.close();
    testPathOp(reporter, path, pathB, kDifference_PathOp, filename);
}

static void skpwww_kenlevine_blogspot_com_28(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(276, 9506);
    path.lineTo(276, 7531);
    path.lineTo(277, 7531);
    path.lineTo(277.01001f, 9506);
    path.lineTo(276, 9506);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(276, 7531);
    pathB.lineTo(277.01001f, 7531);
    pathB.lineTo(277, 9506);
    pathB.lineTo(276, 9506);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_defense_studies_blogspot_com_64(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(276, 9600);
    path.lineTo(276, 7703);
    path.lineTo(277, 7703);
    path.lineTo(277.01001f, 9600);
    path.lineTo(276, 9600);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(276, 7703);
    pathB.lineTo(277.01001f, 7703);
    pathB.lineTo(277, 9600);
    pathB.lineTo(276, 9600);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_uniquefx_net_442(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(960, 306);
    path.lineTo(960, 305);
    path.lineTo(1000, 305);
    path.lineTo(1000, 306.708527f);
    path.lineTo(960, 306);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(960, 305);
    pathB.lineTo(958.997253f, 306.002747f);
    pathB.lineTo(1017, 307);
    pathB.lineTo(1019, 305);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_kitcheninspirations_wordpress_com_32(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(47.1666679f, 19651.334f);
    path.lineTo(65.8333359f, 19651.332f);
    path.lineTo(65.8333359f, 19651.5f);
    path.lineTo(47.1666679f, 19651.5f);
    path.lineTo(47.1666679f, 19651.334f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(47.1666679f, 19651.5f);
    pathB.lineTo(47.1666679f, 19651.332f);
    pathB.lineTo(65.8333359f, 19651.334f);
    pathB.lineTo(65.8333359f, 19651.5f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_educationalcraft_com_4(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(941, 1494);
    path.lineTo(941, 1464);
    path.lineTo(985, 1464);
    path.lineTo(985, 1494);
    path.lineTo(941, 1494);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(979.211975f, 1480.45496f);
    pathB.cubicTo(979.211975f, 1480.45496f, 976.348999f, 1479.68506f, 977.495972f, 1475.59497f);
    pathB.cubicTo(977.497009f, 1475.59497f, 981.072021f, 1477.88501f, 979.211975f, 1480.45496f);
    pathB.close();
    pathB.moveTo(977.854004f, 1484.453f);
    pathB.cubicTo(977.854004f, 1484.453f, 975.265991f, 1483.26099f, 976.713989f, 1479.35205f);
    pathB.cubicTo(976.713989f, 1479.35303f, 979.84198f, 1482.23499f, 977.854004f, 1484.453f);
    pathB.close();
    pathB.moveTo(980.226013f, 1476.229f);
    pathB.cubicTo(980.226013f, 1476.229f, 977.078003f, 1476.349f, 977.234985f, 1471.97095f);
    pathB.cubicTo(977.234985f, 1471.97095f, 980.666992f, 1473.12903f, 980.226013f, 1476.229f);
    pathB.close();
    pathB.moveTo(984.546021f, 1478.31494f);
    pathB.cubicTo(984.546021f, 1478.31494f, 983.187988f, 1481.93396f, 980.026001f, 1481.276f);
    pathB.cubicTo(980.026978f, 1481.276f, 979.554993f, 1478.38904f, 984.546021f, 1478.31494f);
    pathB.close();
    pathB.moveTo(978.989014f, 1484.198f);
    pathB.cubicTo(978.989014f, 1484.198f, 979.094971f, 1481.33496f, 983.786011f, 1481.823f);
    pathB.cubicTo(983.786011f, 1481.823f, 982.070007f, 1485.49805f, 978.989014f, 1484.198f);
    pathB.close();
    pathB.moveTo(976.393005f, 1486.86804f);
    pathB.cubicTo(976.393005f, 1486.86804f, 976.719971f, 1484.06494f, 981.679016f, 1485.37f);
    pathB.cubicTo(981.679016f, 1485.37f, 979.169983f, 1488.40796f, 976.393005f, 1486.86804f);
    pathB.close();
    pathB.moveTo(969.156982f, 1490.40002f);
    pathB.cubicTo(969.156982f, 1490.40002f, 971.478027f, 1488.23596f, 974.869995f, 1491.21399f);
    pathB.cubicTo(974.869995f, 1491.21497f, 970.828003f, 1493.026f, 969.156982f, 1490.40002f);
    pathB.close();
    pathB.moveTo(972.825012f, 1483.93701f);
    pathB.cubicTo(972.825012f, 1483.93701f, 973.971985f, 1487.98401f, 971.161987f, 1488.94604f);
    pathB.cubicTo(971.161987f, 1488.94495f, 969.278015f, 1486.37097f, 972.825012f, 1483.93701f);
    pathB.close();
    pathB.moveTo(965.60199f, 1489.98499f);
    pathB.cubicTo(965.60199f, 1489.98499f, 964.879028f, 1487.19202f, 969.864014f, 1486.75f);
    pathB.cubicTo(969.864014f, 1486.75f, 968.749023f, 1490.672f, 965.60199f, 1489.98499f);
    pathB.close();
    pathB.moveTo(970.666992f, 1492.81604f);
    pathB.cubicTo(970.666992f, 1492.81604f, 967.327026f, 1494.49695f, 964.999023f, 1491.56299f);
    pathB.cubicTo(964.999023f, 1491.56299f, 967.304016f, 1489.43896f, 970.666992f, 1492.81604f);
    pathB.close();
    pathB.moveTo(968.343994f, 1481.53796f);
    pathB.cubicTo(971.573975f, 1479.94995f, 971.687988f, 1476.78601f, 971.687988f, 1476.78601f);
    pathB.lineTo(971.393982f, 1466.83398f);
    pathB.lineTo(954.960999f, 1466.83398f);
    pathB.lineTo(954.666016f, 1476.78601f);
    pathB.cubicTo(954.666016f, 1476.78601f, 954.780029f, 1479.94995f, 958.008972f, 1481.53796f);
    pathB.cubicTo(960.781006f, 1482.90295f, 962.166992f, 1484.77698f, 962.166992f, 1484.77698f);
    pathB.cubicTo(962.166992f, 1484.77698f, 962.747986f, 1485.70105f, 963.177979f, 1485.70105f);
    pathB.cubicTo(963.606995f, 1485.70105f, 964.185974f, 1484.77698f, 964.185974f, 1484.77698f);
    pathB.cubicTo(964.185974f, 1484.77698f, 965.573975f, 1482.90295f, 968.343994f, 1481.53796f);
    pathB.close();
    pathB.moveTo(963.215027f, 1486.67004f);
    pathB.cubicTo(962.744995f, 1486.67004f, 962.106995f, 1485.65405f, 962.106995f, 1485.65405f);
    pathB.cubicTo(962.106995f, 1485.65405f, 960.585022f, 1483.59595f, 957.539001f, 1482.09705f);
    pathB.cubicTo(953.991028f, 1480.35205f, 953.867004f, 1476.87598f, 953.867004f, 1476.87598f);
    pathB.lineTo(954.190002f, 1465.94397f);
    pathB.lineTo(972.23999f, 1465.94397f);
    pathB.lineTo(972.565002f, 1476.87695f);
    pathB.cubicTo(972.565002f, 1476.87695f, 972.440979f, 1480.35303f, 968.891968f, 1482.09802f);
    pathB.cubicTo(965.846008f, 1483.59705f, 964.325012f, 1485.65503f, 964.325012f, 1485.65503f);
    pathB.cubicTo(964.325012f, 1485.65503f, 963.687012f, 1486.67004f, 963.215027f, 1486.67004f);
    pathB.close();
    pathB.moveTo(960.68103f, 1489.98499f);
    pathB.cubicTo(957.533997f, 1490.672f, 956.417969f, 1486.75f, 956.417969f, 1486.75f);
    pathB.cubicTo(961.403015f, 1487.19202f, 960.68103f, 1489.98499f, 960.68103f, 1489.98499f);
    pathB.close();
    pathB.moveTo(963.143005f, 1489.59802f);
    pathB.cubicTo(963.763f, 1489.59802f, 964.265015f, 1490.09998f, 964.265015f, 1490.72095f);
    pathB.cubicTo(964.265015f, 1491.34204f, 963.763f, 1491.84399f, 963.143005f, 1491.84399f);
    pathB.cubicTo(962.521973f, 1491.84399f, 962.02002f, 1491.34204f, 962.02002f, 1490.72095f);
    pathB.cubicTo(962.02002f, 1490.09998f, 962.521973f, 1489.59802f, 963.143005f, 1489.59802f);
    pathB.close();
    pathB.moveTo(961.283997f, 1491.56299f);
    pathB.cubicTo(958.953979f, 1494.49695f, 955.61499f, 1492.81604f, 955.61499f, 1492.81604f);
    pathB.cubicTo(958.97699f, 1489.43896f, 961.283997f, 1491.56299f, 961.283997f, 1491.56299f);
    pathB.close();
    pathB.moveTo(957.127014f, 1490.40002f);
    pathB.cubicTo(955.455017f, 1493.026f, 951.414001f, 1491.21399f, 951.414001f, 1491.21399f);
    pathB.cubicTo(954.802979f, 1488.23596f, 957.127014f, 1490.40002f, 957.127014f, 1490.40002f);
    pathB.close();
    pathB.moveTo(949.890991f, 1486.86804f);
    pathB.cubicTo(947.112976f, 1488.40796f, 944.604004f, 1485.37f, 944.604004f, 1485.37f);
    pathB.cubicTo(949.562012f, 1484.06494f, 949.890991f, 1486.86804f, 949.890991f, 1486.86804f);
    pathB.close();
    pathB.moveTo(947.070984f, 1480.45496f);
    pathB.cubicTo(945.211975f, 1477.88501f, 948.786011f, 1475.59497f, 948.786011f, 1475.59497f);
    pathB.cubicTo(949.934021f, 1479.68506f, 947.070984f, 1480.45496f, 947.070984f, 1480.45496f);
    pathB.close();
    pathB.moveTo(946.054016f, 1476.229f);
    pathB.cubicTo(945.61499f, 1473.12903f, 949.046997f, 1471.97095f, 949.046997f, 1471.97095f);
    pathB.cubicTo(949.205994f, 1476.349f, 946.054016f, 1476.229f, 946.054016f, 1476.229f);
    pathB.close();
    pathB.moveTo(948.427002f, 1484.453f);
    pathB.cubicTo(946.440002f, 1482.23499f, 949.567993f, 1479.35205f, 949.567993f, 1479.35205f);
    pathB.cubicTo(951.015991f, 1483.26099f, 948.427002f, 1484.453f, 948.427002f, 1484.453f);
    pathB.close();
    pathB.moveTo(947.294006f, 1484.198f);
    pathB.cubicTo(944.210999f, 1485.49805f, 942.495972f, 1481.823f, 942.495972f, 1481.823f);
    pathB.cubicTo(947.187988f, 1481.33496f, 947.294006f, 1484.198f, 947.294006f, 1484.198f);
    pathB.close();
    pathB.moveTo(946.255005f, 1481.276f);
    pathB.cubicTo(943.094971f, 1481.93396f, 941.736023f, 1478.31494f, 941.736023f, 1478.31494f);
    pathB.cubicTo(946.728027f, 1478.38904f, 946.255005f, 1481.276f, 946.255005f, 1481.276f);
    pathB.close();
    pathB.moveTo(945.312988f, 1478.18005f);
    pathB.cubicTo(942.052979f, 1477.80103f, 942.651001f, 1473.87805f, 942.651001f, 1473.87805f);
    pathB.cubicTo(946.562988f, 1475.66199f, 945.312988f, 1478.18005f, 945.312988f, 1478.18005f);
    pathB.close();
    pathB.moveTo(945.382019f, 1474.328f);
    pathB.cubicTo(942.924011f, 1472.729f, 944.492004f, 1469.48706f, 944.492004f, 1469.48706f);
    pathB.cubicTo(947.388977f, 1471.95703f, 945.382019f, 1474.328f, 945.382019f, 1474.328f);
    pathB.close();
    pathB.moveTo(946.797974f, 1470.27405f);
    pathB.cubicTo(944.664978f, 1467.90198f, 947.083984f, 1465.50598f, 947.083984f, 1465.50598f);
    pathB.cubicTo(949.145996f, 1468.82605f, 946.797974f, 1470.27405f, 946.797974f, 1470.27405f);
    pathB.close();
    pathB.moveTo(947.392029f, 1471.64197f);
    pathB.cubicTo(947.624023f, 1468.56299f, 951.361023f, 1468.29199f, 951.361023f, 1468.29199f);
    pathB.cubicTo(950.554016f, 1471.98499f, 947.392029f, 1471.64197f, 947.392029f, 1471.64197f);
    pathB.close();
    pathB.moveTo(948.64801f, 1468.15002f);
    pathB.cubicTo(948.638977f, 1465.22095f, 952.265991f, 1464.46399f, 952.265991f, 1464.46399f);
    pathB.cubicTo(951.672974f, 1468.53101f, 948.64801f, 1468.15002f, 948.64801f, 1468.15002f);
    pathB.close();
    pathB.moveTo(951.176025f, 1486.97803f);
    pathB.cubicTo(948.963013f, 1484.62f, 951.361023f, 1481.77698f, 951.361023f, 1481.77698f);
    pathB.cubicTo(953.734985f, 1485.48596f, 951.176025f, 1486.97803f, 951.176025f, 1486.97803f);
    pathB.close();
    pathB.moveTo(947.51001f, 1488.53101f);
    pathB.cubicTo(947.51001f, 1488.53101f, 951.596985f, 1486.32202f, 953.234009f, 1489.08997f);
    pathB.cubicTo(953.234009f, 1489.08997f, 951.158997f, 1491.03601f, 947.51001f, 1488.53101f);
    pathB.close();
    pathB.moveTo(955.120972f, 1488.94495f);
    pathB.cubicTo(952.309021f, 1487.98303f, 953.458984f, 1483.93604f, 953.458984f, 1483.93604f);
    pathB.cubicTo(957.004028f, 1486.37097f, 955.120972f, 1488.94495f, 955.120972f, 1488.94495f);
    pathB.close();
    pathB.moveTo(978.770996f, 1488.53101f);
    pathB.cubicTo(975.122986f, 1491.03601f, 973.047974f, 1489.08997f, 973.047974f, 1489.08997f);
    pathB.cubicTo(974.684998f, 1486.32202f, 978.770996f, 1488.53101f, 978.770996f, 1488.53101f);
    pathB.close();
    pathB.moveTo(975.106995f, 1486.97803f);
    pathB.cubicTo(975.106995f, 1486.97803f, 972.546997f, 1485.48706f, 974.919983f, 1481.77698f);
    pathB.cubicTo(974.919983f, 1481.776f, 977.31897f, 1484.61902f, 975.106995f, 1486.97803f);
    pathB.close();
    pathB.moveTo(974.016968f, 1464.46399f);
    pathB.cubicTo(974.016968f, 1464.46399f, 977.643982f, 1465.22095f, 977.633972f, 1468.15002f);
    pathB.cubicTo(977.633972f, 1468.15002f, 974.611023f, 1468.53101f, 974.016968f, 1464.46399f);
    pathB.close();
    pathB.moveTo(974.919983f, 1468.29199f);
    pathB.cubicTo(974.919983f, 1468.29199f, 978.658997f, 1468.56299f, 978.890015f, 1471.64197f);
    pathB.cubicTo(978.890015f, 1471.64197f, 975.72699f, 1471.98499f, 974.919983f, 1468.29199f);
    pathB.close();
    pathB.moveTo(979.197998f, 1465.50598f);
    pathB.cubicTo(979.197998f, 1465.50598f, 981.619019f, 1467.90198f, 979.481995f, 1470.27405f);
    pathB.cubicTo(979.481995f, 1470.27405f, 977.138f, 1468.82605f, 979.197998f, 1465.50598f);
    pathB.close();
    pathB.moveTo(980.900024f, 1474.328f);
    pathB.cubicTo(980.900024f, 1474.328f, 978.893005f, 1471.95703f, 981.791016f, 1469.48706f);
    pathB.cubicTo(981.791016f, 1469.48596f, 983.358032f, 1472.729f, 980.900024f, 1474.328f);
    pathB.close();
    pathB.moveTo(980.968994f, 1478.18005f);
    pathB.cubicTo(980.968994f, 1478.18005f, 979.718018f, 1475.66199f, 983.632019f, 1473.87805f);
    pathB.cubicTo(983.632019f, 1473.87805f, 984.229004f, 1477.80103f, 980.968994f, 1478.18005f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_narayana_publishers_com_194(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1083.34314f, 445.65686f);
    path.quadTo(1081, 443.313721f, 1081, 440);
    path.lineTo(1257, 440);
    path.quadTo(1257, 443.313721f, 1254.65686f, 445.65686f);
    path.quadTo(1252.31372f, 448, 1249, 448);
    path.lineTo(1089, 448);
    path.quadTo(1085.68628f, 448, 1083.34314f, 445.65686f);
    path.close();
    path.moveTo(1083, 441);
    path.lineTo(1255, 441);
    path.quadTo(1255, 443.071075f, 1253.53552f, 444.535522f);
    path.quadTo(1252.07104f, 446, 1250, 446);
    path.lineTo(1088, 446);
    path.quadTo(1085.92896f, 446, 1084.46448f, 444.535522f);
    path.quadTo(1083, 443.071075f, 1083, 441);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1081, 440);
    pathB.lineTo(1082, 440);
    pathB.lineTo(1090.01001f, 448);
    pathB.lineTo(1081, 448);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_cooksnaps_com_17(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(170.340179f, 176);
    path.lineTo(166, 176);
    path.quadTo(161.964188f, 176, 158.299957f, 176.896912f);
    path.quadTo(154.678162f, 177.952271f, 151.183014f, 179.9702f);
    path.lineTo(150.316986f, 180.4702f);
    path.quadTo(146.175812f, 182.861099f, 143.115921f, 186.081696f);
    path.quadTo(140.693939f, 188.70134f, 138.99472f, 191.620407f);
    path.quadTo(137.316833f, 194.550888f, 136.259338f, 197.957367f);
    path.quadTo(135, 202.217865f, 135, 207);
    path.lineTo(135, 208);
    path.quadTo(135, 212.035751f, 135.896912f, 215.699997f);
    path.quadTo(136.952286f, 219.321869f, 138.9702f, 222.816986f);
    path.lineTo(139.4702f, 223.683014f);
    path.quadTo(141.861099f, 227.824188f, 145.081696f, 230.884079f);
    path.quadTo(147.70134f, 233.306061f, 150.620407f, 235.00528f);
    path.quadTo(153.550888f, 236.683167f, 156.957367f, 237.740662f);
    path.quadTo(161.217865f, 239, 166, 239);
    path.lineTo(170.482162f, 239);
    path.quadTo(176.307037f, 238.210968f, 181.816986f, 235.0298f);
    path.lineTo(182.683014f, 234.5298f);
    path.quadTo(182.686462f, 234.527817f, 182.689896f, 234.525818f);
    path.quadTo(193.804352f, 228.105652f, 197.126709f, 215.70639f);
    path.quadTo(200.450104f, 203.303314f, 194.0298f, 192.183014f);
    path.lineTo(193.5298f, 191.316986f);
    path.quadTo(187.109497f, 180.196686f, 174.706406f, 176.873276f);
    path.quadTo(172.503067f, 176.282898f, 170.340179f, 176);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(139.4702f, 223.683014f);
    pathB.lineTo(138.9702f, 222.816986f);
    pathB.quadTo(132.549896f, 211.696686f, 135.873291f, 199.293594f);
    pathB.quadTo(139.196686f, 186.890503f, 150.316986f, 180.4702f);
    pathB.lineTo(151.183014f, 179.9702f);
    pathB.quadTo(162.303314f, 173.549896f, 174.706406f, 176.873276f);
    pathB.quadTo(187.109497f, 180.196686f, 193.5298f, 191.316986f);
    pathB.lineTo(194.0298f, 192.183014f);
    pathB.quadTo(200.450104f, 203.303314f, 197.126709f, 215.70639f);
    pathB.quadTo(193.803314f, 228.109497f, 182.683014f, 234.5298f);
    pathB.lineTo(181.816986f, 235.0298f);
    pathB.quadTo(170.696686f, 241.450104f, 158.293594f, 238.126709f);
    pathB.quadTo(145.890503f, 234.803314f, 139.4702f, 223.683014f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_swapspacesystems_com_5(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(819.050781f, 5539.72412f);
    path.quadTo(819.651672f, 5539.1543f, 820.479858f, 5539.17578f);
    path.lineTo(1191.35278f, 5548.8877f);
    path.quadTo(1192.18091f, 5548.90918f, 1192.7511f, 5549.50977f);
    path.quadTo(1193.32141f, 5550.11133f, 1193.29968f, 5550.93945f);
    path.lineTo(1186.57214f, 5807.85107f);
    path.quadTo(1186.55054f, 5808.6792f, 1185.94958f, 5809.24951f);
    path.quadTo(1185.34863f, 5809.81982f, 1184.52051f, 5809.79834f);
    path.lineTo(813.647705f, 5800.08643f);
    path.quadTo(812.819519f, 5800.06494f, 812.249268f, 5799.46387f);
    path.quadTo(811.679016f, 5798.86279f, 811.700684f, 5798.03467f);
    path.lineTo(818.428162f, 5541.12305f);
    path.quadTo(818.44989f, 5540.29492f, 819.050781f, 5539.72412f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(818.48053f, 5539.12354f);
    pathB.lineTo(1193.35205f, 5548.93994f);
    pathB.lineTo(1186.5199f, 5809.85059f);
    pathB.lineTo(811.648376f, 5800.03418f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_kitcheninspirations_wordpress_com_66(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(47.1666679f, 27820.668f);
    path.lineTo(60.8333359f, 27820.668f);
    path.lineTo(60.8333359f, 27820.498f);
    path.lineTo(47.1666679f, 27820.5f);
    path.lineTo(47.1666679f, 27820.668f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(47.1666679f, 27820.668f);
    pathB.lineTo(47.1666679f, 27820.498f);
    pathB.lineTo(60.8333359f, 27820.5f);
    pathB.lineTo(60.8333359f, 27820.668f);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_etiqadd_com_2464(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(630.378662f, 1293.42896f);
    path.quadTo(631.257385f, 1292.55029f, 632.5f, 1292.55029f);
    path.quadTo(633.742615f, 1292.55029f, 634.621338f, 1293.42896f);
    path.lineTo(639.571045f, 1298.37866f);
    path.quadTo(640.449768f, 1299.25732f, 640.449707f, 1300.5f);
    path.quadTo(640.449768f, 1301.74268f, 639.571045f, 1302.62134f);
    path.lineTo(634.621338f, 1307.57104f);
    path.quadTo(633.742615f, 1308.44971f, 632.5f, 1308.44971f);
    path.quadTo(631.257385f, 1308.44971f, 630.378662f, 1307.57104f);
    path.lineTo(625.428955f, 1302.62134f);
    path.quadTo(624.550232f, 1301.74268f, 624.550293f, 1300.5f);
    path.quadTo(624.550232f, 1299.25732f, 625.428955f, 1298.37866f);
    path.lineTo(630.378662f, 1293.42896f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(632.5f, 1291.30762f);
    pathB.lineTo(641.692383f, 1300.5f);
    pathB.lineTo(632.5f, 1309.69238f);
    pathB.lineTo(623.307617f, 1300.5f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_narayana_verlag_de_194(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1083.34314f, 513.65686f);
    path.quadTo(1081, 511.313721f, 1081, 508);
    path.lineTo(1257, 508);
    path.quadTo(1257, 511.313721f, 1254.65686f, 513.65686f);
    path.quadTo(1252.31372f, 516, 1249, 516);
    path.lineTo(1089, 516);
    path.quadTo(1085.68628f, 516, 1083.34314f, 513.65686f);
    path.close();
    path.moveTo(1083, 509);
    path.lineTo(1255, 509);
    path.quadTo(1255, 511.071075f, 1253.53552f, 512.535522f);
    path.quadTo(1252.07104f, 514, 1250, 514);
    path.lineTo(1088, 514);
    path.quadTo(1085.92896f, 514, 1084.46448f, 512.535522f);
    path.quadTo(1083, 511.071075f, 1083, 509);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(1081, 508);
    pathB.lineTo(1082, 508);
    pathB.lineTo(1090.01001f, 516);
    pathB.lineTo(1081, 516);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_americascup_com_108(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(999.454102f, 689.17157f);
    path.quadTo(1001.172f, 688, 1002.82886f, 688);
    path.lineTo(1013.82886f, 688);
    path.lineTo(1002.17114f, 713);
    path.lineTo(991.171143f, 713);
    path.quadTo(989.514282f, 713, 988.889038f, 711.82843f);
    path.quadTo(988.263794f, 710.65686f, 989.036377f, 709);
    path.lineTo(996.963623f, 692);
    path.quadTo(997.736206f, 690.34314f, 999.454102f, 689.17157f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(998.828857f, 688);
    pathB.lineTo(1013.82886f, 688);
    pathB.lineTo(1002.17114f, 713);
    pathB.lineTo(987.171143f, 713);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_vantageproduction_com_109(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(794.514709f, 759.485291f);
    path.quadTo(791, 755.970581f, 791, 751);
    path.lineTo(1133, 751);
    path.quadTo(1133, 755.970581f, 1129.48523f, 759.485291f);
    path.quadTo(1125.97058f, 763, 1121, 763);
    path.lineTo(803, 763);
    path.quadTo(798.029419f, 763, 794.514709f, 759.485291f);
    path.close();
    path.moveTo(793, 752);
    path.lineTo(1131, 752);
    path.quadTo(1131, 755.727905f, 1128.36401f, 758.363953f);
    path.quadTo(1125.72791f, 761, 1122, 761);
    path.lineTo(802, 761);
    path.quadTo(798.272095f, 761, 795.636047f, 758.363953f);
    path.quadTo(793, 755.727905f, 793, 752);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(791, 751);
    pathB.lineTo(792, 751);
    pathB.lineTo(804.01001f, 763);
    pathB.lineTo(791, 763);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_aceinfographics_com_106(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(166.878677f, 7638.87891f);
    path.quadTo(166, 7639.75732f, 166, 7641);
    path.lineTo(166, 11577);
    path.quadTo(166, 11578.2422f, 166.878677f, 11579.1211f);
    path.quadTo(167.388f, 11579.6309f, 168.019989f, 11579.8447f);
    path.lineTo(168.019974f, 11576.2979f);
    path.quadTo(168, 11576.1533f, 168, 11576);
    path.lineTo(168, 7642);
    path.lineTo(168.000015f, 7641.99316f);
    path.lineTo(168, 7640);
    path.lineTo(166.878677f, 7638.87891f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(166, 7638);
    pathB.lineTo(168.020004f, 7635.97998f);
    pathB.lineTo(168, 11578);
    pathB.lineTo(166, 11580);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_tcmevents_org_13(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(465.951904f, 547.960144f);
    path.quadTo(465.66571f, 546.867371f, 465.404938f, 546);
    path.lineTo(465.504089f, 546);
    path.quadTo(465.670349f, 546.601257f, 465.84668f, 547.288391f);
    path.quadTo(467.274506f, 552.852356f, 468.506836f, 560.718567f);
    path.quadTo(467.336121f, 553.24585f, 465.951904f, 547.960144f);
    path.close();
    path.moveTo(470.591064f, 574.024353f);
    path.quadTo(474.844055f, 601.176025f, 471.728271f, 620.364502f);
    path.quadTo(470.567017f, 627.515991f, 468.635742f, 632);
    path.lineTo(469.106812f, 632);
    path.quadTo(470.791504f, 627.638672f, 471.833496f, 621.036255f);
    path.quadTo(474.905701f, 601.569519f, 470.591064f, 574.024353f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(322.992462f, 541.475708f);
    pathB.lineTo(465.531616f, 541.724426f);
    pathB.lineTo(468.507751f, 560.724426f);
    pathB.lineTo(325.968597f, 560.475708f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_paseoitaigara_com_br_56(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(633.147217f, 1247);
    path.lineTo(718, 1162.14722f);
    path.lineTo(802.852783f, 1247);
    path.lineTo(718, 1331.85278f);
    path.lineTo(633.147217f, 1247);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(635.268494f, 1244.87866f);
    pathB.lineTo(715.878662f, 1164.26855f);
    pathB.quadTo(716.757385f, 1163.38989f, 718, 1163.38989f);
    pathB.quadTo(719.242615f, 1163.38989f, 720.121338f, 1164.26855f);
    pathB.lineTo(800.731506f, 1244.87866f);
    pathB.quadTo(801.610168f, 1245.75732f, 801.610168f, 1247);
    pathB.quadTo(801.610229f, 1248.24268f, 800.731445f, 1249.12134f);
    pathB.lineTo(720.121338f, 1329.73145f);
    pathB.quadTo(719.242676f, 1330.61011f, 718, 1330.61011f);
    pathB.quadTo(716.757385f, 1330.61011f, 715.878723f, 1329.73145f);
    pathB.lineTo(635.268555f, 1249.12134f);
    pathB.quadTo(634.389832f, 1248.24268f, 634.389832f, 1247);
    pathB.quadTo(634.389832f, 1245.75732f, 635.268494f, 1244.87866f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_mortgagemarketguide_com_109(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(816.514709f, 781.485291f);
    path.quadTo(813, 777.970581f, 813, 773);
    path.lineTo(1133, 773);
    path.quadTo(1133, 777.970581f, 1129.48523f, 781.485291f);
    path.quadTo(1125.97058f, 785, 1121, 785);
    path.lineTo(825, 785);
    path.quadTo(820.029419f, 785, 816.514709f, 781.485291f);
    path.close();
    path.moveTo(815, 774);
    path.lineTo(1131, 774);
    path.quadTo(1131, 777.727905f, 1128.36401f, 780.363953f);
    path.quadTo(1125.72791f, 783, 1122, 783);
    path.lineTo(824, 783);
    path.quadTo(820.272095f, 783, 817.636047f, 780.363953f);
    path.quadTo(815, 777.727905f, 815, 774);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(813, 773);
    pathB.lineTo(814, 773);
    pathB.lineTo(826.01001f, 785);
    pathB.lineTo(813, 785);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_9to5mac_com_64(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(365, 5101);
    path.lineTo(365, 5082);
    path.lineTo(366, 5083);
    path.lineTo(367, 5092.96631f);
    path.lineTo(367, 5100);
    path.quadTo(367, 5101.50537f, 367.967712f, 5102.61084f);
    path.lineTo(368.278717f, 5105.71045f);
    path.quadTo(367.277618f, 5105.34863f, 366.464478f, 5104.53564f);
    path.quadTo(365, 5103.07129f, 365, 5101);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(365, 5082);
    pathB.lineTo(365.848175f, 5081.15186f);
    pathB.lineTo(368, 5103);
    pathB.lineTo(365, 5106);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

static void skpwww_googleventures_com_32(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(725.911682f, 898.767456f);
    path.lineTo(741.232544f, 885.911682f);
    path.lineTo(754.088318f, 901.232544f);
    path.lineTo(738.767456f, 914.088318f);
    path.lineTo(725.911682f, 898.767456f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(728.37677f, 870.59082f);
    pathB.lineTo(754.088257f, 901.232605f);
    pathB.lineTo(738.767395f, 914.088379f);
    pathB.lineTo(713.055908f, 883.446594f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

#if TEST_NEW_FAILURES
static void skpwww_devbridge_com_22(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(4915, 1523);
    path.quadTo(4887.24756f, 1523, 4867.62402f, 1542.6239f);
    path.quadTo(4848, 1562.24768f, 4848, 1590);
    path.quadTo(4848, 1617.75232f, 4867.62402f, 1637.3761f);
    path.quadTo(4887.24756f, 1657, 4915, 1657);
    path.quadTo(4942.75244f, 1657, 4962.37598f, 1637.3761f);
    path.quadTo(4982, 1617.75232f, 4982, 1590);
    path.quadTo(4982, 1562.24768f, 4962.37598f, 1542.6239f);
    path.quadTo(4942.75244f, 1523, 4915, 1523);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(4981.99902f, 1590);
    pathB.quadTo(4981.99902f, 1617.75232f, 4962.375f, 1637.3761f);
    pathB.quadTo(4942.75146f, 1657, 4914.99902f, 1657);
    pathB.quadTo(4887.24658f, 1657, 4867.62305f, 1637.3761f);
    pathB.quadTo(4847.99902f, 1617.75232f, 4847.99902f, 1590);
    pathB.quadTo(4847.99902f, 1562.24768f, 4867.62305f, 1542.6239f);
    pathB.quadTo(4887.24658f, 1523, 4914.99902f, 1523);
    pathB.quadTo(4942.75146f, 1523, 4962.375f, 1542.6239f);
    pathB.quadTo(4981.99902f, 1562.24768f, 4981.99902f, 1590);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// cubic/quad intersection
static void skpwww_alamdi_com_3(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(10210.8789f, 5315.87891f);
    path.quadTo(10211.7578f, 5315, 10213, 5315);
    path.lineTo(10230, 5315);
    path.quadTo(10231.2422f, 5315, 10232.1211f, 5315.87891f);
    path.quadTo(10233, 5316.75732f, 10233, 5318);
    path.lineTo(10233, 5338);
    path.quadTo(10233, 5339.24268f, 10232.1211f, 5340.12109f);
    path.quadTo(10231.2422f, 5341, 10230, 5341);
    path.lineTo(10213, 5341);
    path.quadTo(10211.7578f, 5341, 10210.8789f, 5340.12109f);
    path.quadTo(10210, 5339.24268f, 10210, 5338);
    path.lineTo(10210, 5318);
    path.quadTo(10210, 5316.75732f, 10210.8789f, 5315.87891f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kEvenOdd_FillType);
    pathB.moveTo(10213, 5315);
    pathB.lineTo(10230, 5315);
    pathB.cubicTo(10231.6572f, 5315, 10233, 5316.34326f, 10233, 5318);
    pathB.lineTo(10233, 5338);
    pathB.cubicTo(10233, 5339.10449f, 10231.6572f, 5340, 10230, 5340);
    pathB.lineTo(10213, 5340);
    pathB.cubicTo(10211.3428f, 5340, 10210, 5339.10449f, 10210, 5338);
    pathB.lineTo(10210, 5318);
    pathB.cubicTo(10210, 5316.34326f, 10211.3428f, 5315, 10213, 5315);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// bumpSpan failed assertion "span->fOppValue >= 0"
static void skpwww_familysurvivalprotocol_wordpress_com_61(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(143, 14557);
    path.lineTo(165, 14557);
    path.lineTo(165, 14555.9902f);
    path.lineTo(143, 14556);
    path.lineTo(143, 14557);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(143, 14557);
    pathB.lineTo(143, 14555.9902f);
    pathB.lineTo(165, 14556);
    pathB.lineTo(165, 14557);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

static void skpwww_firstunitedbank_com_19(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(808.585815f, 11673.5859f);
    path.quadTo(809.17157f, 11673, 810, 11673);
    path.lineTo(1032, 11673);
    path.quadTo(1038.21326f, 11673, 1042.60657f, 11677.3936f);
    path.quadTo(1047, 11681.7871f, 1047, 11688);
    path.quadTo(1047, 11682.2012f, 1042.60657f, 11678.1006f);
    path.quadTo(1038.21326f, 11674, 1032, 11674);
    path.lineTo(810, 11674);
    path.quadTo(809.585815f, 11674, 809.292908f, 11674.293f);
    path.quadTo(809, 11674.5859f, 809, 11675);
    path.lineTo(809, 11701);
    path.quadTo(809, 11701.4141f, 809.292908f, 11701.707f);
    path.quadTo(809.585815f, 11702, 810, 11702);
    path.lineTo(1032, 11702);
    path.quadTo(1038.21326f, 11702, 1042.60657f, 11697.8994f);
    path.quadTo(1047, 11693.7988f, 1047, 11688);
    path.quadTo(1047, 11694.2129f, 1042.60657f, 11698.6064f);
    path.quadTo(1038.21326f, 11703, 1032, 11703);
    path.lineTo(810, 11703);
    path.quadTo(809.17157f, 11703, 808.585815f, 11702.4141f);
    path.quadTo(808, 11701.8281f, 808, 11701);
    path.lineTo(808, 11675);
    path.quadTo(808, 11674.1719f, 808.585815f, 11673.5859f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(808, 11703);
    pathB.lineTo(809.5f, 11701.5f);
    pathB.lineTo(1062.91907f, 11687.0811f);
    pathB.lineTo(1047, 11703);
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// addSimpleAngle: failed assertion "index == count() - 2"
static void skpwww_shinydemos_com_5(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(205.884888f, 648.203857f);
    path.lineTo(771.570374f, 82.5183716f);
    path.lineTo(1110.98169f, 421.929626f);
    path.lineTo(545.296143f, 987.615112f);
    path.lineTo(205.884888f, 648.203857f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(771.570374f, 82.5183716f);
    pathB.lineTo(1110.98169f, 421.929626f);
    pathB.lineTo(545.296204f, 987.615051f);
    pathB.lineTo(205.884949f, 648.203796f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// addTCoincident oPeek = &other->fTs[++oPeekIndex];
static void skpwww_lptemp_com_3(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(78.6429825f, 1394.30969f);
    path.quadTo(79.6192932f, 1393.33337f, 81.0000076f, 1393.33337f);
    path.lineTo(341, 1393.33337f);
    path.quadTo(342.380707f, 1393.33337f, 343.357025f, 1394.30969f);
    path.quadTo(344.333344f, 1395.28601f, 344.333344f, 1396.66675f);
    path.lineTo(344.333344f, 1465.66663f);
    path.quadTo(344.333344f, 1467.04736f, 343.357025f, 1468.02368f);
    path.quadTo(342.380707f, 1469, 341, 1469);
    path.lineTo(81.0000076f, 1469);
    path.quadTo(79.6192932f, 1469, 78.6429825f, 1468.02368f);
    path.quadTo(77.6666718f, 1467.04736f, 77.6666718f, 1465.66663f);
    path.lineTo(77.6666718f, 1396.66675f);
    path.quadTo(77.6666718f, 1395.28601f, 78.6429825f, 1394.30969f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kEvenOdd_FillType);
    pathB.moveTo(81, 1393.33337f);
    pathB.lineTo(341, 1393.33337f);
    pathB.cubicTo(342.840942f, 1393.33337f, 344.333344f, 1394.82568f, 344.333344f, 1396.66675f);
    pathB.lineTo(344.333344f, 1465.66675f);
    pathB.cubicTo(344.333344f, 1467.32361f, 342.840942f, 1468.66675f, 341, 1468.66675f);
    pathB.lineTo(81, 1468.66675f);
    pathB.cubicTo(79.15905f, 1468.66675f, 77.6666718f, 1467.32361f, 77.6666718f, 1465.66675f);
    pathB.lineTo(77.6666718f, 1396.66675f);
    pathB.cubicTo(77.6666718f, 1394.82568f, 79.15905f, 1393.33337f, 81, 1393.33337f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

#if TEST_NEW_FAILURES
// SkOpSegment.cpp:3915: failed assertion "otherEnd >= 0"
static void skpwww_shinydemos_com_15(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(1000, 310.947968f);
    path.lineTo(771.570374f, 82.5183716f);
    path.lineTo(205.884888f, 648.203857f);
    path.lineTo(448.68103f, 891);
    path.lineTo(641.911255f, 891);
    path.lineTo(1000, 532.911316f);
    path.lineTo(1000, 310.947968f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kWinding_FillType);
    pathB.moveTo(771.570374f, 82.5183716f);
    pathB.lineTo(1110.98169f, 421.929626f);
    pathB.lineTo(545.296204f, 987.615051f);
    pathB.lineTo(205.884949f, 648.203796f);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}

// SkOpSegment.cpp:4398: failed assertion "!span->fDone"
static void skpwww_lptemp_com_5(skiatest::Reporter* reporter, const char* filename) {
    SkPath path;
    path.setFillType(SkPath::kEvenOdd_FillType);
    path.moveTo(78.6429825f, 3150.97632f);
    path.quadTo(79.6192932f, 3150, 81.0000076f, 3150);
    path.lineTo(341, 3150);
    path.quadTo(342.380707f, 3150, 343.357025f, 3150.97632f);
    path.quadTo(344.333344f, 3151.95264f, 344.333344f, 3153.33325f);
    path.lineTo(344.333344f, 5205.3335f);
    path.quadTo(344.333344f, 5206.71436f, 343.357025f, 5207.69092f);
    path.quadTo(342.380707f, 5208.66699f, 341, 5208.66699f);
    path.lineTo(81.0000076f, 5208.66699f);
    path.quadTo(79.6192932f, 5208.66699f, 78.6429825f, 5207.69092f);
    path.quadTo(77.6666718f, 5206.71436f, 77.6666718f, 5205.3335f);
    path.lineTo(77.6666718f, 3153.33325f);
    path.quadTo(77.6666718f, 3151.95264f, 78.6429825f, 3150.97632f);
    path.close();
    SkPath pathB;
    pathB.setFillType(SkPath::kEvenOdd_FillType);
    pathB.moveTo(81, 3150);
    pathB.lineTo(341, 3150);
    pathB.cubicTo(342.840942f, 3150, 344.333344f, 3151.49268f, 344.333344f, 3153.3335f);
    pathB.lineTo(344.333344f, 5205.3335f);
    pathB.cubicTo(344.333344f, 5206.99023f, 342.840942f, 5208.3335f, 341, 5208.3335f);
    pathB.lineTo(81, 5208.3335f);
    pathB.cubicTo(79.15905f, 5208.3335f, 77.6666718f, 5206.99023f, 77.6666718f, 5205.3335f);
    pathB.lineTo(77.6666718f, 3153.3335f);
    pathB.cubicTo(77.6666718f, 3151.49268f, 79.15905f, 3150, 81, 3150);
    pathB.close();
    testPathOp(reporter, path, pathB, kIntersect_PathOp, filename);
}
#endif

static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;

static struct TestDesc tests[] = {
    TEST(skpwww_lptemp_com_3),
    TEST(skpwww_shinydemos_com_5),
#if TEST_NEW_FAILURES
    TEST(skpwww_lptemp_com_5),
    TEST(skpwww_shinydemos_com_15),
    TEST(skpwww_familysurvivalprotocol_wordpress_com_61),
    TEST(skpwww_alamdi_com_3),
    TEST(skpwww_devbridge_com_22),
#endif
    TEST(skpwww_firstunitedbank_com_19),
    TEST(skpwww_googleventures_com_32),
    TEST(skpwww_9to5mac_com_64),
    TEST(skpwww_wartepop_blogspot_com_br_6),
    TEST(skpwww_wartepop_blogspot_com_br_6a),
    TEST(skpwww_cooksnaps_com_32a),
    TEST(skpwww_argus_presse_fr_41),
    TEST(skpwww_cooksnaps_com_17),
    TEST(skpwww_cooksnaps_com_32),
    TEST(skpwww_kitcheninspirations_wordpress_com_66),
    TEST(skpwww_tcmevents_org_13),
    TEST(skpwww_narayana_publishers_com_194),
    TEST(skpwww_swapspacesystems_com_5),
    TEST(skpwww_vantageproduction_com_109),
    TEST(skpwww_americascup_com_108),
    TEST(skpwww_narayana_verlag_de_194),
    TEST(skpwww_etiqadd_com_2464),
    TEST(skpwww_paseoitaigara_com_br_56),
    TEST(skpwww_mortgagemarketguide_com_109),
    TEST(skpwww_aceinfographics_com_106),
    TEST(skpwww_educationalcraft_com_4),
    TEST(skpwww_kitcheninspirations_wordpress_com_32),
    TEST(skpwww_artblart_com_8),
    TEST(skpwww_docgelo_com_66),
    TEST(skpwww_uniquefx_net_442),
    TEST(skpwww_defense_studies_blogspot_com_64),
    TEST(skpwww_kenlevine_blogspot_com_28),
    TEST(skpwww_fashionscandal_com_94),
    TEST(skpwww_thaienews_blogspot_com_36),
    TEST(skpwww_galaxystwo_com_4),
    TEST(skpwww_catingueiraonline_com_352),
    TEST(skpwww_evolvehq_com_210),
    TEST(skpwww_odia_com_br_26),
    TEST(skpwww_lokado_de_173),
    TEST(skpwww_seopack_blogspot_com_2153),
    TEST(skpwww_partsdata_de_53),
    TEST(skpwww_simplysaru_com_40),
    TEST(skpwww_jessicaslens_wordpress_com_222),
    TEST(skpwww_kpopexplorer_net_22),
    TEST(skpwww_tunero_de_24),
    TEST(skpwww_karnivool_com_au_11),
    TEST(skpwww_pindosiya_com_99),
    TEST(skpwww_contextualnewsfeeds_com_346),
    TEST(skpwww_helha_be_109),
    TEST(skpwww_phototransferapp_com_24),
    TEST(skpwww_phototransferapp_com_24x),
    TEST(skpwww_gruposejaumdivulgador_com_br_4),
    TEST(skpwww_hubbyscook_com_22),
    TEST(skpwww_maturesupertube_com_21),
    TEST(skpwww_getgold_jp_731),
    TEST(skpwww_trashness_com_36),
    TEST(skpwww_exystence_net_61),
    TEST(skpwww_320kbps_net_2231),
    TEST(skpwww_heartiste_wordpress_com_86),
    TEST(skpwww_hairjobsearch_com_31),
    TEST(skpwww_alucinados_net_101),
    TEST(skpnamecheap_com_405),
    TEST(skpelpais_com_18),
    TEST(skpwww_cityads_ru_249),
    TEST(skpwww_alrakoba_net_62),
    TEST(skpwww_dealnews_com_315),
    TEST(skpwww_inmotionhosting_com_9),
    TEST(skpskpicture14),
    TEST(skpskpicture15),
    TEST(skpwww_meb_gov_tr_6),
    TEST(skpwww_sciality_com_101),
    TEST(skpwww_booking_com_68),
    TEST(skpwww_despegar_com_mx_272),
    TEST(skpwww_lavoixdunord_fr_11),
    TEST(skppptv_com_62),
    TEST(skppchappy_com_au102),
    TEST(skpsciality_com161),
    TEST(skpi_gino_com16),
    TEST(skpnaoxrane_ru23),
    TEST(skptcmevents_org23),
    TEST(skpredbullskatearcade_es16),
    TEST(skpfinanzasdigital_com9),
    TEST(skpgithub_io_26),
    TEST(skpgithub_io_25),
    TEST(skpwww_meb_gov_tr_5),
    TEST(skpwww_sciality_com_100),
    TEST(skpwww_joomla_org_23),
    TEST(skpwww_macrumors_com_131),
    TEST(skpwww_briian_com_34),
    TEST(skpwww_leadpages_net_84),
    TEST(skpwww_fj_p_com_22),
    TEST(skppartainasdemo250_org56),
    TEST(skpsd_graphic_net104),
    TEST(skpbreakmystyle_com10),
    TEST(skpnational_com_au81),
    TEST(skprentacheat_com30),
    TEST(skptracksflow_com9),
    TEST(skpautobutler_dk29),
    TEST(skponlinecollege_org144),
    TEST(skphostloco_com11),
    TEST(skpsergeychunkevich_com8),
    TEST(skpmlk_com326),
    TEST(skpcyclist_friends_gr52),
    TEST(skpfrauen_magazin_com83),
    TEST(skpthesuburbanite_com213),
    TEST(skpsudoestenegocios_com186),
    TEST(skpmtrk_uz27),
    TEST(skpilkoora_com37),
    TEST(skpmm4everfriends_com43),
    TEST(skpflite_com41),
    TEST(skpcheeseandburger_com225),
    TEST(skpeverytechpro_blogspot_com100),
};

static const size_t testCount = SK_ARRAY_COUNT(tests);

static bool runReverse = false;
static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;

DEF_TEST(PathOpsSkp, reporter) {
#if DEBUG_SHOW_TEST_NAME
    strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH);
#endif
    RunTestSet(reporter, tests, testCount, firstTest, stopTest, runReverse);
}
