Miembros del hogar

Distribución de las variables

Asociación con el Outcome:

Participación en la VANCAN ……

OR no ajustados

Variable OR (95% CI)1 95% CI1 p-value
Hogares con algún niño menor de 6 años y/o otros niños mayores


    No
    Sí 0.79 0.71, 0.88 <0.001
Hogar SOLO con niños menores de 6 años


    No
    Sí 0.90 0.76, 1.05 0.2
Hogar SOLO con niños entre 6 a 17 año


    No
    Sí 1.04 0.95, 1.15 0.4
Hogar con menores de edad


    No
    Sí 0.87 0.79, 0.96 0.005
1 OR = Odds Ratio, CI = Confidence Interval

Sexo y edad del Perro

Distribución de las variables

Asociación con el Outcome:

Participación en la VANCAN ……

OR no ajustados

Variable OR (95% CI)1 95% CI1 p-value
Sexo de los perros en el hogar


    Hembra
    Ambos sexos 1.34 1.18, 1.52 <0.001
    Macho 1.16 1.04, 1.30 0.009
Hogares SOLO con perros <3m


    No
    Sí 0.07 0.04, 0.12 <0.001
Hogares con algun perro <3m y otros


    No
    Sí 0.37 0.30, 0.46 <0.001
Hogares SOLO con perros de 3m-11m


    No
    Sí 0.67 0.56, 0.80 <0.001
Hogares con perros de 3m-11m y otros


    No
    Sí 0.95 0.84, 1.07 0.4
Hogares SOLO con perros de 1a-2a


    No
    Sí 1.08 0.96, 1.21 0.2
Hogares con perros entre 1a-2a y otros


    No
    Sí 1.25 1.13, 1.37 <0.001
Hogares SOLO con perros <3a


    No
    Sí 1.03 0.94, 1.13 0.5
Hogares con algún perros <3a y otros


    No
    Sí 1.34 1.21, 1.47 <0.001
1 OR = Odds Ratio, CI = Confidence Interval

Restricción del perro y paseos por el dueño

Distribución de las variables

Asociación con el Outcome:

Participación en la VANCAN ……

OR no ajustados según nivel de restricción

Variable1 OR (95% CI)1,2 95% CI1,2 p-value1
Hogares con perros que viven SOLO en la calle


    No
    Sí 0.61 0.45, 0.83 0.002
Hogares con perros que viven en la en la calle y otros


    No
    Sí 0.79 0.62, 1.01 0.059
Hogares con perros que SOLO entran y salen cuando quieren


    No
    Sí 0.77 0.67, 0.89 <0.001
Hogares con perros que entran y salen cuando quieren y otros


    No
    Sí 0.82 0.72, 0.94 0.003
Hogares con perros que SOLO salen 1-2 veces al día


    No
    Sí 1.19 1.05, 1.34 0.006
Hogares con perros que solo salen 1-2 veces al día y otros


    No
    Sí 1.22 1.08, 1.36 <0.001
Hogares con perros que SOLO se escapan de vez en cuando


    No
    Sí 0.96 0.79, 1.16 0.7
Hogares con perros que se escapan de vez en cuando y otros


    No
    Sí 1.02 0.87, 1.21 0.8
Hogares con perros que SOLO viven dentro de casa


    No
    Sí 1.01 0.92, 1.11 0.9
Hogares con perros que viven dentro de casa y otros


    No
    Sí 1.05 0.96, 1.15 0.3
Riesgo de rabia según nivel de restricción


    Riesgo Bajo
    Riesgo Intermedio 1.11 0.99, 1.23 0.064
    Riesgo Alto 0.83 0.73, 0.94 0.004
1 Descripción de riesgo según nivel de restricción: Riesgo Bajo = Hogar con perros solo en casa Riesgo Intermedio = Hogar con perro con alguna salida controlada o escapes ocasionales Riesgo Alto = Hogar con perros en calle o que entra y sale libremente
2 OR = Odds Ratio, CI = Confidence Interval

OR no ajustados de acuerdo a si pasea o no a su perro

Variable1 OR (95% CI)1,2 95% CI1,2 p-value1
Frecuencia de paseo a sus perros


    No pasea
    Pasea a veces 1.53 1.37, 1.71 <0.001
    Pasea siempre 1.76 1.56, 1.98 <0.001
Riesgo de rabia segun paseo con o sin correa


    Paseo sin riesgo
    Paseo con riesgo 1.22 1.08, 1.39 0.002
1 Descripción de riesgo según paseo: Paseo sin riesgo = Paseo con correa Paseo con riesgo = Paseo sin o con correa
2 OR = Odds Ratio, CI = Confidence Interval
LS0tDQp0aXRsZTogIkVWQUxVQUNJw5NOIERFIFZBUklBQkxFUyBFTkNVRVNUQVMgMjAyMyINCmF1dGhvcjogIkVxdWlwbyBFbmN1ZXN0YXMtSm9yZ2UgQ2HDsWFyaSINCmRhdGU6ICIyMDI0LTA2LTIwIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICB0aGVtZTogdW5pdGVkDQotLS0NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0Kcm0obGlzdD1scygpKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShyaW8pDQojaW5zdGFsbC5wYWNrYWdlcygiRFQiKQ0KbGlicmFyeShqYW5pdG9yKQ0KI2luc3RhbGwucGFja2FnZXMoImthYmxlRXh0cmEiKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeSh0aWR5cikNCmxpYnJhcnkoZ3RzdW1tYXJ5KQ0KY2F0KCJcMDE0IikgDQpgYGANCg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KDQpjYXQoIlwwMTQiKSAgDQoNCiMjIyMjIyMjIyMjIyMjIyMjDQojIyMgQWJyaWVuZG8gZGF0YSB5IGRhdGEgY2xlYW5pbmcgYWRpY2lvbmFsDQoNCiMgTGVlIGxvcyBhcmNoaXZvcyBDU1YNCmVuY3Vlc3RhXzIwMjMgPC0gaW1wb3J0KCJlbmN1ZXN0YV8yMDIzX3JlYWR5LlJEUyIpIA0Kc3RyKGVuY3Vlc3RhXzIwMjMkaG91c2VfY2hpbGQpIA0KDQoNCmBgYA0KDQoNCg0KIyBNaWVtYnJvcyBkZWwgaG9nYXIgDQoNCiMjIyBEaXN0cmlidWNpw7NuIGRlIGxhcyB2YXJpYWJsZXMNCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD04fQ0KDQojIEhvZ2FyZXMgY29uIG1lbm9yZXMgZGUgZWRhZCBwb3IgQ2x1c3Rlcg0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKGhvdXNlX2NoaWxkKSAlPiUNCiAgbXV0YXRlKGNsdXN0ZXJfbmFtZSA9IGZhY3RvcihjbHVzdGVyX25hbWUsIGxldmVscyA9IGVuY3Vlc3RhXzIwMjMgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoaG91c2VfY2hpbGQgPT0gIlPDrSIpICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQoY2x1c3Rlcl9uYW1lKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UobikgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsKGNsdXN0ZXJfbmFtZSkpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2x1c3Rlcl9uYW1lLCBmaWxsID0gaG91c2VfY2hpbGQpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICJIb2dhcmVzIGNvbiBtZW5vcmVzIGRlIGVkYWQgcG9yIENsdXN0ZXIiLA0KICAgICAgIGZpbGwgPSAiTWVub3JlcyBlZGFkIiwNCiAgICAgICB4ID0gIkNsdXN0ZXIiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KIyBIb2dhcmVzIGNvbiBhbGfDum4gbmnDsW8gbWVub3IgZGUgNiBhw7Fvcw0KDQoNCmVuY3Vlc3RhXzIwMjMgJT4lDQogIGRyb3BfbmEoaG91c2VfY2hpbGRfNikgJT4lDQogIG11dGF0ZShjbHVzdGVyX25hbWUgPSBmYWN0b3IoY2x1c3Rlcl9uYW1lLCBsZXZlbHMgPSBlbmN1ZXN0YV8yMDIzICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGhvdXNlX2NoaWxkXzYgPT0gIlPDrSIpICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQoY2x1c3Rlcl9uYW1lKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UobikgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsKGNsdXN0ZXJfbmFtZSkpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2x1c3Rlcl9uYW1lLCBmaWxsID0gaG91c2VfY2hpbGRfNikpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIsIGFlcyh5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoYWZ0ZXJfc3RhdChjb3VudCksICIgKCIsIHJvdW5kKGFmdGVyX3N0YXQoY291bnQpIC8gdGFwcGx5KGFmdGVyX3N0YXQoY291bnQpLCBhZnRlcl9zdGF0KHgpLCBzdW0pW2FmdGVyX3N0YXQoeCldICogMTAwLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9maWxsKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIkhvZ2FyZXMgY29uIGFsZ8O6biBuacOxbyBtZW5vciBkZSA2IGHDsW9zIHkvbyBvdHJvcyBuacOxb3MgbWF5b3JlcyIsDQogICAgICAgZmlsbCA9ICJILk5pw7Fvczw2IiwNCiAgICAgICB4ID0gIkNsdXN0ZXIiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQoNCmBgYA0KDQojIyMgQXNvY2lhY2nDs24gY29uIGVsIE91dGNvbWU6DQoNCiMjIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIC4uLi4uLg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0xLjZ9DQoNCiMgLi4uLiBlbiBob2dhcmVzIGNvbiBuacOxb3MgbWVub3IgZGUgNiBhw7FvcyB5IG90cm9zIG5pw7Fvcw0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKGhvdXNlX2NoaWxkXzYpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBob3VzZV9jaGlsZF82LCBmaWxsID0gdmFuY2FuX291dGNvbWUpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICIuLi4uIGVuIGhvZ2FyZXMgY29uIGFsZ8O6biBuacOxbyBtZW5vciBkZSA2IGHDsW9zIHkvbyBvdHJvcyBuacOxb3MgbWF5b3JlcyIsDQogICAgICAgZmlsbCA9ICJPdXRjb21lIiwNCiAgICAgICB4ID0gIk5pw7Fvczw2YSIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQoNCg0KIyAuLi4uIGVuIGhvZ2FyZXMgU09MTyBjb24gbmnDsW9zIG1lbm9yZXMgZGUgNiBhw7Fvcw0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKGhvdXNlX2NoaWxkXzZfb25seSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGhvdXNlX2NoaWxkXzZfb25seSwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBlbiBob2dhcmVzIFNPTE8gY29uIG5pw7FvcyBtZW5vcmVzIGRlIDYgYcOxb3MiLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJPbmx5IE5pw7Fvczw2YSIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQoNCiMgLi4uLiBlbiBob2dhcmVzIFNPTE8gY29uIG5pw7FvcyBlbnRyZSA2IGEgMTcgYcOxb3MNCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShob3VzZV9jaGlsZF82XzE3X29ubHkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBob3VzZV9jaGlsZF82XzE3X29ubHksIGZpbGwgPSB2YW5jYW5fb3V0Y29tZSkpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIsIGFlcyh5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoYWZ0ZXJfc3RhdChjb3VudCksICIgKCIsIHJvdW5kKGFmdGVyX3N0YXQoY291bnQpIC8gdGFwcGx5KGFmdGVyX3N0YXQoY291bnQpLCBhZnRlcl9zdGF0KHgpLCBzdW0pW2FmdGVyX3N0YXQoeCldICogMTAwLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9maWxsKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIi4uLi4gZW4gaG9nYXJlcyBTT0xPIGNvbiBuacOxb3MgZW50cmUgNiBhIDE3IGHDsW9zIiwNCiAgICAgICBmaWxsID0gIk91dGNvbWUiLA0KICAgICAgIHggPSAiT25seSBOacOxb3MgNmEtMTdhIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KDQojIC4uLi4gZW4gaG9nYXJlcyBjb24gbWVub3JlcyBkZSBlZGFkDQoNCmVuY3Vlc3RhXzIwMjMgJT4lDQogIGRyb3BfbmEoaG91c2VfY2hpbGQpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBob3VzZV9jaGlsZCwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBlbiBob2dhcmVzIGNvbiBtZW5vcmVzIGRlIGVkYWQiLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJNZW5vciBlZGFkIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQogDQoNCg0KDQpgYGANCg0KIyMjIyBPUiBubyBhanVzdGFkb3MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCiNBbsOhbGlzaXMgY3J1ZG8gDQp2YXJpYWJsZXMgPC0gYyggImhvdXNlX2NoaWxkXzYiLCAiaG91c2VfY2hpbGRfNl9vbmx5IiwgImhvdXNlX2NoaWxkXzZfMTdfb25seSIsICJob3VzZV9jaGlsZCIpDQoNCiMgRnVuY2nDs24gcGFyYSBhanVzdGFyIGVsIG1vZGVsbyB5IGV4dHJhZXIgbG9zIHJlc3VsdGFkb3MNCmZpdF9hbmRfc3VtbWFyaXplIDwtIGZ1bmN0aW9uKHZhcikgew0KICBmb3JtdWxhIDwtIGFzLmZvcm11bGEocGFzdGUoInZhbmNhbl9vdXRjb21lX2EgfiIsIHZhcikpDQogIG1vZGVsIDwtIGdsbShmb3JtdWxhLCBkYXRhID0gZW5jdWVzdGFfMjAyMywgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpKQ0KICB0YmwgPC0gdGJsX3JlZ3Jlc3Npb24obW9kZWwsIGV4cG9uZW50aWF0ZSA9IFRSVUUpDQogIHRibCA8LSB0YmwgJT4lIG1vZGlmeV9oZWFkZXIobGFiZWwgPSB2YXIpDQogIHJldHVybih0YmwpDQp9DQoNCiMgQWp1c3RhciBlbCBtb2RlbG8geSBleHRyYWVyIGxvcyByZXN1bHRhZG9zIHBhcmEgY2FkYSB2YXJpYWJsZQ0KcmVzdWx0cyA8LSBsYXBwbHkodmFyaWFibGVzLCBmaXRfYW5kX3N1bW1hcml6ZSkNCg0KIyBDb21iaW5hciBsYXMgdGFibGFzIGRlIHJlc3VsdGFkb3MgZW4gdW5hIHNvbGENCmNvbWJpbmVkX3Jlc3VsdHMgPC0gdGJsX3N0YWNrKHJlc3VsdHMpICU+JQ0KICBtb2RpZnlfaGVhZGVyKGxhYmVsID0gIlZhcmlhYmxlIiwgZXN0aW1hdGUgPSAiT1IgKDk1JSBDSSkiKQ0KDQojIE1vc3RyYXIgbGEgdGFibGEgY29tYmluYWRhDQpjb21iaW5lZF9yZXN1bHRzDQoNCg0KDQpgYGANCg0KDQoNCg0KDQojIFNleG8geSBlZGFkIGRlbCBQZXJybyANCg0KIyMjIERpc3RyaWJ1Y2nDs24gZGUgbGFzIHZhcmlhYmxlcw0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTh9DQoNCg0KDQojIFNleG8gZGUgY2FuZXMgcG9yIGhvZ2FyIHkgcG9yIENsdXN0ZXINCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShzZXhfY2FuX2hvdXNlKSAlPiUNCiAgbXV0YXRlKGNsdXN0ZXJfbmFtZSA9IGZhY3RvcihjbHVzdGVyX25hbWUsIGxldmVscyA9IGVuY3Vlc3RhXzIwMjMgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2V4X2Nhbl9ob3VzZSA9PSAiTWFjaG8iKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KGNsdXN0ZXJfbmFtZSkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJhbmdlKG4pICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbChjbHVzdGVyX25hbWUpKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGNsdXN0ZXJfbmFtZSwgZmlsbCA9IHNleF9jYW5faG91c2UpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICJTZXhvIGRlIHBlcnJvcyBwb3IgaG9nYXIgIHBvciBDbHVzdGVyIiwNCiAgICAgICBmaWxsID0gIlNleG8gcGVycm8iLA0KICAgICAgIHggPSAiQ2x1c3RlciIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQoNCiMgSG9nYXJlcyBjb24gYWwgbWVub3MgdW4gcGVycm8gZW50cmUgMyBtZXNlcyBhIDExIG1lc2VzLiANCiN0YWJsZShlbmN1ZXN0YV8yMDIzJGNhbl8zbV9hXzExbV9sZWFzdCwgdXNlTkEgPSAiYWx3YXlzIikNCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShjYW5fM21fYV8xMW1fbGVhc3QpICU+JQ0KICBtdXRhdGUoY2x1c3Rlcl9uYW1lID0gZmFjdG9yKGNsdXN0ZXJfbmFtZSwgbGV2ZWxzID0gZW5jdWVzdGFfMjAyMyAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihjYW5fM21fYV8xMW1fbGVhc3QgPT0gIlPDrSIpICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQoY2x1c3Rlcl9uYW1lKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UobikgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsKGNsdXN0ZXJfbmFtZSkpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2x1c3Rlcl9uYW1lLCBmaWxsID0gY2FuXzNtX2FfMTFtX2xlYXN0KSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiSG9nYXJlcyBjb24gYWwgbWVub3MgdW4gcGVycm8gZW50cmUgMyBtZXNlcyBhIDExIG1lc2VzIiwNCiAgICAgICBmaWxsID0gIkNhbiAzbS0xMW0iLA0KICAgICAgIHggPSAiQ2x1c3RlciIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQoNCg0KIyBIb2dhcmVzIFNPTE8gY29uIHBlcnJvcyBkZSAzIGEgbcOhcyBhw7Fvcw0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKGNhbl9tYXlvcl8zYV9vbmx5KSAlPiUNCiAgbXV0YXRlKGNsdXN0ZXJfbmFtZSA9IGZhY3RvcihjbHVzdGVyX25hbWUsIGxldmVscyA9IGVuY3Vlc3RhXzIwMjMgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoY2FuX21heW9yXzNhX29ubHkgPT0gIlPDrSIpICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQoY2x1c3Rlcl9uYW1lKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmFuZ2UobikgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsKGNsdXN0ZXJfbmFtZSkpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2x1c3Rlcl9uYW1lLCBmaWxsID0gY2FuX21heW9yXzNhX29ubHkpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICJIb2dhcmVzIFNPTE8gY29uIHBlcnJvcyBkZSAzIGEgbcOhcyBhw7FvcyIsDQogICAgICAgZmlsbCA9ICJDYW4gPjNhIiwNCiAgICAgICB4ID0gIkNsdXN0ZXIiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQoNCg0KYGBgDQoNCg0KIyMjIEFzb2NpYWNpw7NuIGNvbiBlbCBPdXRjb21lOg0KDQojIyMjIFBhcnRpY2lwYWNpw7NuIGVuIGxhIFZBTkNBTiAuLi4uLi4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MS42fQ0KDQoNCiMgLi4uLiBlbiBob2dhcmVzIGNvbiBwZXJyb3Mgc2Vnw7puIHN1IHNleG8NCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShzZXhfY2FuX2hvdXNlKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gc2V4X2Nhbl9ob3VzZSwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBlbiBob2dhcmVzIGNvbiBwZXJyb3Mgc2Vnw7puIHN1IHNleG8iLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJTZXhvIGNhbiIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQoNCiMgLi4uLiBlbiBob2dhcmVzIFNPTE8gY29uIHBlcnJvcyA8M20NCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShjYW5fbWVub3JfM21fb25seSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGNhbl9tZW5vcl8zbV9vbmx5LCBmaWxsID0gdmFuY2FuX291dGNvbWUpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICIuLi4uIGVuIGhvZ2FyZXMgU09MTyBjb24gcGVycm9zIDwzbSIsDQogICAgICAgZmlsbCA9ICJPdXRjb21lIiwNCiAgICAgICB4ID0gIkNhbiA8M20iLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQojIC4uLi4gZW4gaG9nYXJlcyBjb24gYWxnw7puIHBlcnJvIDwzbSB5IG90cm9zDQoNCmVuY3Vlc3RhXzIwMjMgJT4lDQogIGRyb3BfbmEoY2FuX21lbm9yXzNtX2xlYXN0KSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2FuX21lbm9yXzNtX2xlYXN0LCBmaWxsID0gdmFuY2FuX291dGNvbWUpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICIuLi4uIGVuIGhvZ2FyZXMgY29uIGFsZ8O6biBwZXJybyA8M20geSBvdHJvcyIsDQogICAgICAgZmlsbCA9ICJPdXRjb21lIiwNCiAgICAgICB4ID0gIkNhbiA8M20gYXQgbGVhc3QiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQojIC4uLi4gZW4gaG9nYXJlcyBTT0xPIGNvbiBwZXJyb3MgZGUgM20tMTFtDQoNCmVuY3Vlc3RhXzIwMjMgJT4lDQogIGRyb3BfbmEoY2FuXzNtX2FfMTFtX29ubHkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBjYW5fM21fYV8xMW1fb25seSwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBlbiBob2dhcmVzIFNPTE8gY29uIHBlcnJvcyBkZSAzbS0xMW0iLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJDYW4gM20tMTFtIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KIyAuLi4uIGVuIGhvZ2FyZXMgY29uIGFsZ8O6biBwZXJybyBlbnRyZSAzbS0xMW0geSBvdHJvcw0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKGNhbl8zbV9hXzExbV9sZWFzdCApICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBjYW5fM21fYV8xMW1fbGVhc3QgLCBmaWxsID0gdmFuY2FuX291dGNvbWUpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICIuLi4uIGVuIGhvZ2FyZXMgY29uIGFsZ8O6biBwZXJybyBlbnRyZSAzbS0xMW0geSBvdHJvcyIsDQogICAgICAgZmlsbCA9ICJPdXRjb21lIiwNCiAgICAgICB4ID0gIkNhbiAzbS0xMW0gYXQgbGVhc3QiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQoNCiMgLi4uLiBlbiBob2dhcmVzIFNPTE8gY29uIHBlcnJvcyBkZSAxYS0yYQ0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKGNhbl8xYV9hXzJhX29ubHkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBjYW5fMWFfYV8yYV9vbmx5LCBmaWxsID0gdmFuY2FuX291dGNvbWUpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICIuLi4uIGVuIGhvZ2FyZXMgU09MTyBjb24gcGVycm9zIGRlIDFhLTJhIiwNCiAgICAgICBmaWxsID0gIk91dGNvbWUiLA0KICAgICAgIHggPSAiQ2FuIDFhLTJhIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KIyAuLi4uIGVuIGhvZ2FyZXMgY29uIGFsZ8O6biBwZXJybyBlbnRyZSAxYS0yYSB5IG90cm9zDQoNCmVuY3Vlc3RhXzIwMjMgJT4lDQogIGRyb3BfbmEoY2FuXzFhX2FfMmFfbGVhc3QgKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2FuXzFhX2FfMmFfbGVhc3QgLCBmaWxsID0gdmFuY2FuX291dGNvbWUpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICIuLi4uIGVuIGhvZ2FyZXMgY29uIGFsZ8O6biBwZXJybyBlbnRyZSAxYS0yYSB5IG90cm9zIiwNCiAgICAgICBmaWxsID0gIk91dGNvbWUiLA0KICAgICAgIHggPSAiQ2FuIDFhLTJhIGF0IGxlYXN0IiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KIyAuLi4uIGVuIGhvZ2FyZXMgU09MTyBjb24gcGVycm9zIDwzYQ0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKGNhbl9tYXlvcl8zYV9vbmx5KSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2FuX21heW9yXzNhX29ubHksIGZpbGwgPSB2YW5jYW5fb3V0Y29tZSkpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIsIGFlcyh5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoYWZ0ZXJfc3RhdChjb3VudCksICIgKCIsIHJvdW5kKGFmdGVyX3N0YXQoY291bnQpIC8gdGFwcGx5KGFmdGVyX3N0YXQoY291bnQpLCBhZnRlcl9zdGF0KHgpLCBzdW0pW2FmdGVyX3N0YXQoeCldICogMTAwLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9maWxsKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIi4uLi4gZW4gaG9nYXJlcyBTT0xPIGNvbiBwZXJyb3MgPDNhIiwNCiAgICAgICBmaWxsID0gIk91dGNvbWUiLA0KICAgICAgIHggPSAiQ2FuIDwzYSIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQoNCiMgLi4uLiBlbiBob2dhcmVzIGNvbiBhbGfDum4gcGVycm8gPDNhIHkgb3Ryb3MNCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShjYW5fbWF5b3JfM2FfbGVhc3QgKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2FuX21heW9yXzNhX2xlYXN0ICwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBlbiBob2dhcmVzIGNvbiBhbGfDum4gcGVycm8gPDNhIHkgb3Ryb3MiLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJDYW4gPDNhIGF0IGxlYXN0IiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KDQoNCg0KYGBgDQoNCg0KIyMjIyBPUiBubyBhanVzdGFkb3MNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCiNBbsOhbGlzaXMgY3J1ZG8gDQp2YXJpYWJsZXMgPC0gYyggInNleF9jYW5faG91c2UiLCAiY2FuX21lbm9yXzNtX29ubHkiLCAiY2FuX21lbm9yXzNtX2xlYXN0IiwgImNhbl8zbV9hXzExbV9vbmx5IiwgICJjYW5fM21fYV8xMW1fbGVhc3QiLCAgImNhbl8xYV9hXzJhX29ubHkiLCAiY2FuXzFhX2FfMmFfbGVhc3QiLCAgImNhbl9tYXlvcl8zYV9vbmx5IiwgImNhbl9tYXlvcl8zYV9sZWFzdCIpDQoNCg0KDQoNCiMgRnVuY2nDs24gcGFyYSBhanVzdGFyIGVsIG1vZGVsbyB5IGV4dHJhZXIgbG9zIHJlc3VsdGFkb3MNCmZpdF9hbmRfc3VtbWFyaXplIDwtIGZ1bmN0aW9uKHZhcikgew0KICBmb3JtdWxhIDwtIGFzLmZvcm11bGEocGFzdGUoInZhbmNhbl9vdXRjb21lX2EgfiIsIHZhcikpDQogIG1vZGVsIDwtIGdsbShmb3JtdWxhLCBkYXRhID0gZW5jdWVzdGFfMjAyMywgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpKQ0KICB0YmwgPC0gdGJsX3JlZ3Jlc3Npb24obW9kZWwsIGV4cG9uZW50aWF0ZSA9IFRSVUUpDQogIHRibCA8LSB0YmwgJT4lIG1vZGlmeV9oZWFkZXIobGFiZWwgPSB2YXIpDQogIHJldHVybih0YmwpDQp9DQoNCiMgQWp1c3RhciBlbCBtb2RlbG8geSBleHRyYWVyIGxvcyByZXN1bHRhZG9zIHBhcmEgY2FkYSB2YXJpYWJsZQ0KcmVzdWx0cyA8LSBsYXBwbHkodmFyaWFibGVzLCBmaXRfYW5kX3N1bW1hcml6ZSkNCg0KIyBDb21iaW5hciBsYXMgdGFibGFzIGRlIHJlc3VsdGFkb3MgZW4gdW5hIHNvbGENCmNvbWJpbmVkX3Jlc3VsdHMgPC0gdGJsX3N0YWNrKHJlc3VsdHMpICU+JQ0KICBtb2RpZnlfaGVhZGVyKGxhYmVsID0gIlZhcmlhYmxlIiwgZXN0aW1hdGUgPSAiT1IgKDk1JSBDSSkiKQ0KDQojIE1vc3RyYXIgbGEgdGFibGEgY29tYmluYWRhDQpjb21iaW5lZF9yZXN1bHRzDQoNCg0KYGBgDQoNCg0KDQoNCg0KIyBSZXN0cmljY2nDs24gZGVsIHBlcnJvIHkgcGFzZW9zIHBvciBlbCBkdWXDsW8gDQoNCiMjIyBEaXN0cmlidWNpw7NuIGRlIGxhcyB2YXJpYWJsZXMNCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD04fQ0KDQoNCiMgSG9nYXJlcyBjb24gcGVycm9zIHF1ZSBTT0xPIHZpdmVuIGRlbnRybyBkZSBjYXNhDQoNCiN0YWJsZShlbmN1ZXN0YV8yMDIzJG5pdmVsX3Jlc3RyaWNjaW9uX3JpZXNnbykNCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYSh2aXZlX2Nhc2Ffb25seSkgJT4lDQogIG11dGF0ZShjbHVzdGVyX25hbWUgPSBmYWN0b3IoY2x1c3Rlcl9uYW1lLCBsZXZlbHMgPSBlbmN1ZXN0YV8yMDIzICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHZpdmVfY2FzYV9vbmx5ID09ICJTw60iKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KGNsdXN0ZXJfbmFtZSkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJhbmdlKG4pICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbChjbHVzdGVyX25hbWUpKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGNsdXN0ZXJfbmFtZSwgZmlsbCA9IHZpdmVfY2FzYV9vbmx5KSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiSG9nYXJlcyBjb24gcGVycm9zIHF1ZSBTT0xPIHZpdmVuIGRlbnRybyBkZSBjYXNhIiwNCiAgICAgICBmaWxsID0gIlJlc3RyaWNjacOzbiIsDQogICAgICAgeCA9ICJDbHVzdGVyIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KDQoNCiMgTml2ZWwgZGUgcmllc2dvIGEgUmFiaWEgZW4gYmFzZSBhIGxhIHJlc3RyaWNjacOzbiBkZWwgcGVycm8NCg0KI3RhYmxlKGVuY3Vlc3RhXzIwMjMkbml2ZWxfcmVzdHJpY2Npb25fcmllc2dvKQ0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKG5pdmVsX3Jlc3RyaWNjaW9uX3JpZXNnbykgJT4lDQogIG11dGF0ZShjbHVzdGVyX25hbWUgPSBmYWN0b3IoY2x1c3Rlcl9uYW1lLCBsZXZlbHMgPSBlbmN1ZXN0YV8yMDIzICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKG5pdmVsX3Jlc3RyaWNjaW9uX3JpZXNnbyA9PSAiUmllc2dvIEFsdG8iKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KGNsdXN0ZXJfbmFtZSkgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJhbmdlKG4pICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbChjbHVzdGVyX25hbWUpKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGNsdXN0ZXJfbmFtZSwgZmlsbCA9IG5pdmVsX3Jlc3RyaWNjaW9uX3JpZXNnbykpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIsIGFlcyh5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoYWZ0ZXJfc3RhdChjb3VudCksICIgKCIsIHJvdW5kKGFmdGVyX3N0YXQoY291bnQpIC8gdGFwcGx5KGFmdGVyX3N0YXQoY291bnQpLCBhZnRlcl9zdGF0KHgpLCBzdW0pW2FmdGVyX3N0YXQoeCldICogMTAwLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9maWxsKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIk5pdmVsIGRlIHJpZXNnbyBhIFJhYmlhIGVuIGJhc2UgYSBsYSByZXN0cmljY2nDs24gZGVsIHBlcnJvIiwNCiAgICAgICBmaWxsID0gIlJlc3RyaWNjacOzbiIsDQogICAgICAgeCA9ICJDbHVzdGVyIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KDQoNCg0KYGBgDQoNCg0KIyMjIEFzb2NpYWNpw7NuIGNvbiBlbCBPdXRjb21lOg0KDQojIyMjIFBhcnRpY2lwYWNpw7NuIGVuIGxhIFZBTkNBTiAuLi4uLi4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9MS42fQ0KDQoNCiMgLi4uLiBlbiBIb2dhcmVzIGNvbiBwZXJyb3MgcXVlIHZpdmVuIFNPTE8gZW4gbGEgY2FsbGUNCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYSh2aXZlX2NhbGxlX29ubHkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSB2aXZlX2NhbGxlX29ubHksIGZpbGwgPSB2YW5jYW5fb3V0Y29tZSkpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIsIGFlcyh5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoYWZ0ZXJfc3RhdChjb3VudCksICIgKCIsIHJvdW5kKGFmdGVyX3N0YXQoY291bnQpIC8gdGFwcGx5KGFmdGVyX3N0YXQoY291bnQpLCBhZnRlcl9zdGF0KHgpLCBzdW0pW2FmdGVyX3N0YXQoeCldICogMTAwLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9maWxsKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIi4uLi4gZW4gSG9nYXJlcyBjb24gcGVycm9zIHF1ZSB2aXZlbiBTT0xPIGVuIGxhIGNhbGxlIiwNCiAgICAgICBmaWxsID0gIk91dGNvbWUiLA0KICAgICAgIHggPSAiVml2ZSBjYWxsZSIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQojIC4uLi4gSG9nYXJlcyBjb24gcGVycm9zIHF1ZSB2aXZlbiBlbiBsYSBlbiBsYSBjYWxsZSB5IG90cm9zDQoNCmVuY3Vlc3RhXzIwMjMgJT4lDQogIGRyb3BfbmEodml2ZV9jYWxsZV9sZWFzdCkgJT4lDQogIGdncGxvdChhZXMoeCA9IHZpdmVfY2FsbGVfbGVhc3QsIGZpbGwgPSB2YW5jYW5fb3V0Y29tZSkpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIsIGFlcyh5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoYWZ0ZXJfc3RhdChjb3VudCksICIgKCIsIHJvdW5kKGFmdGVyX3N0YXQoY291bnQpIC8gdGFwcGx5KGFmdGVyX3N0YXQoY291bnQpLCBhZnRlcl9zdGF0KHgpLCBzdW0pW2FmdGVyX3N0YXQoeCldICogMTAwLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9maWxsKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIi4uLi4gSG9nYXJlcyBjb24gcGVycm9zIHF1ZSB2aXZlbiBlbiBsYSBlbiBsYSBjYWxsZSB5IG90cm9zIiwNCiAgICAgICBmaWxsID0gIk91dGNvbWUiLA0KICAgICAgIHggPSAiY2FsbGVfYXRfbGVhc3QiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQoNCiMgLi4uLiBIb2dhcmVzIGNvbiBwZXJyb3MgcXVlIFNPTE8gZW50cmFuIHkgc2FsZW4gY3VhbmRvIHF1aWVyZW4NCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShjYXNhX2NhbGxlX29ubHkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBjYXNhX2NhbGxlX29ubHksIGZpbGwgPSB2YW5jYW5fb3V0Y29tZSkpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIsIGFlcyh5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoYWZ0ZXJfc3RhdChjb3VudCksICIgKCIsIHJvdW5kKGFmdGVyX3N0YXQoY291bnQpIC8gdGFwcGx5KGFmdGVyX3N0YXQoY291bnQpLCBhZnRlcl9zdGF0KHgpLCBzdW0pW2FmdGVyX3N0YXQoeCldICogMTAwLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9maWxsKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIi4uLi4gSG9nYXJlcyBjb24gcGVycm9zIHF1ZSBTT0xPIGVudHJhbiB5IHNhbGVuIGN1YW5kbyBxdWllcmVuIiwNCiAgICAgICBmaWxsID0gIk91dGNvbWUiLA0KICAgICAgIHggPSAibGlicmUgY2FsbGUgY2FzYSIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQoNCg0KIyAuLi4uIEhvZ2FyZXMgY29uIHBlcnJvcyBxdWUgZW50cmFuIHkgc2FsZW4gY3VhbmRvIHF1aWVyZW4geSBvdHJvcw0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKGNhc2FfY2FsbGVfbGVhc3QpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBjYXNhX2NhbGxlX2xlYXN0LCBmaWxsID0gdmFuY2FuX291dGNvbWUpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICIuLi4uIEhvZ2FyZXMgY29uIHBlcnJvcyBxdWUgZW50cmFuIHkgc2FsZW4gY3VhbmRvIHF1aWVyZW4geSBvdHJvcyIsDQogICAgICAgZmlsbCA9ICJPdXRjb21lIiwNCiAgICAgICB4ID0gImNhbGxlX2Nhc2FfYXRfbGVhc3QiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQoNCg0KDQojIC4uLi4gSG9nYXJlcyBjb24gcGVycm9zIHF1ZSBTT0xPIHNhbGVuICAxLTIgdmVjZXMgYWwgZMOtYQ0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKHNhbGVuX3NvbG9zX2NhbGxlX29ubHkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBzYWxlbl9zb2xvc19jYWxsZV9vbmx5LCBmaWxsID0gdmFuY2FuX291dGNvbWUpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICIuLi4uIEhvZ2FyZXMgY29uIHBlcnJvcyBxdWUgU09MTyBzYWxlbiAgMS0yIHZlY2VzIGFsIGTDrWEiLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJzYWxlbiAxLTIgdmVjZXMiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQoNCiMgLi4uLiBIb2dhcmVzIGNvbiBwZXJyb3MgcXVlIHNvbG8gc2FsZW4gMS0yIHZlY2VzIGFsIGTDrWEgIHkgb3Ryb3MNCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShjYXNhX2NhbGxlX2xlYXN0KSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2FzYV9jYWxsZV9sZWFzdCwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBIb2dhcmVzIGNvbiBwZXJyb3MgcXVlIGVudHJhbiB5IHNhbGVuIGN1YW5kbyBxdWllcmVuIHkgb3Ryb3MiLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJTYWxlbiAxLTJfYXRfbGVhc3QiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQoNCg0KDQojIC4uLi4gSG9nYXJlcyBjb24gcGVycm9zIHF1ZSBTT0xPIHNlIGVzY2FwYW4gZGUgdmV6IGVuIGN1YW5kbw0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKGNhbl9lc2NhcGVfb25seSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGNhbl9lc2NhcGVfb25seSwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBIb2dhcmVzIGNvbiBwZXJyb3MgcXVlIFNPTE8gc2UgZXNjYXBhbiBkZSB2ZXogZW4gY3VhbmRvIiwNCiAgICAgICBmaWxsID0gIk91dGNvbWUiLA0KICAgICAgIHggPSAiU2UgZXNjYXBhbiIsDQogICAgICAgeSA9ICJQcm9wb3JjacOzbiIpICsNCiAgY29vcmRfZmxpcCgpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKQ0KDQoNCg0KIyAuLi4uIEhvZ2FyZXMgY29uIHBlcnJvcyBxdWUgc2UgZXNjYXBhbiBkZSB2ZXogZW4gY3VhbmRvIHkgb3Ryb3MNCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShjYW5fZXNjYXBlX2xlYXN0KSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2FuX2VzY2FwZV9sZWFzdCwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBIb2dhcmVzIGNvbiBwZXJyb3MgcXVlIHNlIGVzY2FwYW4gZGUgdmV6IGVuIGN1YW5kbyB5IG90cm9zIiwNCiAgICAgICBmaWxsID0gIk91dGNvbWUiLA0KICAgICAgIHggPSAiU2UgZXNjYXBhbmF0X2xlYXN0IiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KDQoNCg0KDQojIC4uLi4gSG9nYXJlcyBjb24gcGVycm9zIHF1ZSBTT0xPIHZpdmVuIGRlbnRybyBkZSBjYXNhDQoNCmVuY3Vlc3RhXzIwMjMgJT4lDQogIGRyb3BfbmEodml2ZV9jYXNhX29ubHkpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSB2aXZlX2Nhc2Ffb25seSwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBIb2dhcmVzIGNvbiBwZXJyb3MgcXVlIFNPTE8gdml2ZW4gZGVudHJvIGRlIGNhc2EiLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJFbiBDYXNhIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KDQojIC4uLi4gSG9nYXJlcyBjb24gcGVycm9zIHF1ZSB2aXZlbiBkZW50cm8gZGUgY2FzYSB5IG90cm9zDQoNCmVuY3Vlc3RhXzIwMjMgJT4lDQogIGRyb3BfbmEodml2ZV9jYXNhX2xlYXN0KSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gdml2ZV9jYXNhX2xlYXN0LCBmaWxsID0gdmFuY2FuX291dGNvbWUpKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiLCBhZXMoeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcGFzdGUwKGFmdGVyX3N0YXQoY291bnQpLCAiICgiLCByb3VuZChhZnRlcl9zdGF0KGNvdW50KSAvIHRhcHBseShhZnRlcl9zdGF0KGNvdW50KSwgYWZ0ZXJfc3RhdCh4KSwgc3VtKVthZnRlcl9zdGF0KHgpXSAqIDEwMCwgMSksICIlKSIpKSwNCiAgICAgICAgICAgIHN0YXQgPSAiY291bnQiLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZmlsbCh2anVzdCA9IDAuNSkpICsNCiAgbGFicyh0aXRsZSA9ICIuLi4uIEhvZ2FyZXMgY29uIHBlcnJvcyBxdWUgdml2ZW4gZGVudHJvIGRlIGNhc2EgeSBvdHJvcyIsDQogICAgICAgZmlsbCA9ICJPdXRjb21lIiwNCiAgICAgICB4ID0gIkVuIENhc2FfbGVhc3QiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQojIC4uLi4gUmllc2dvIGRlIHJhYmlhIHNlZ8O6biBuaXZlbCBkZSByZXN0cmljY2nDs24NCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShuaXZlbF9yZXN0cmljY2lvbl9yaWVzZ28pICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBuaXZlbF9yZXN0cmljY2lvbl9yaWVzZ28sIGZpbGwgPSB2YW5jYW5fb3V0Y29tZSkpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIsIGFlcyh5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAoYWZ0ZXJfc3RhdChjb3VudCksICIgKCIsIHJvdW5kKGFmdGVyX3N0YXQoY291bnQpIC8gdGFwcGx5KGFmdGVyX3N0YXQoY291bnQpLCBhZnRlcl9zdGF0KHgpLCBzdW0pW2FmdGVyX3N0YXQoeCldICogMTAwLCAxKSwgIiUpIikpLA0KICAgICAgICAgICAgc3RhdCA9ICJjb3VudCIsIA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9maWxsKHZqdXN0ID0gMC41KSkgKw0KICBsYWJzKHRpdGxlID0gIi4uLi4gUmllc2dvIGRlIHJhYmlhIHNlZ8O6biBuaXZlbCBkZSByZXN0cmljY2nDs24iLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJSaWVzZ29fcmFiaWEiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQoNCiMgLi4uLiBGcmVjdWVuY2lhIGRlIHBhc2VvIGEgc3VzIHBlcnJvcw0KDQplbmN1ZXN0YV8yMDIzICU+JQ0KICBkcm9wX25hKHBhc2VvX3BlcnJvX2NhdCkgJT4lDQogIGdncGxvdChhZXMoeCA9IHBhc2VvX3BlcnJvX2NhdCwgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBGcmVjdWVuY2lhIGRlIHBhc2VvIGEgc3VzIHBlcnJvcyIsDQogICAgICAgZmlsbCA9ICJPdXRjb21lIiwNCiAgICAgICB4ID0gIlBhc2VhIHBlcnJvIiwNCiAgICAgICB5ID0gIlByb3BvcmNpw7NuIikgKw0KICBjb29yZF9mbGlwKCkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCg0KDQoNCiMgLi4uLiBSaWVzZ28gZGUgcmFiaWEgc2Vnw7puIHBhc2VvIGNvbiBvIHNpbiBjb3JyZWENCg0KZW5jdWVzdGFfMjAyMyAlPiUNCiAgZHJvcF9uYShjYW5fcGFzZW9fcmllc2dvKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gY2FuX3Bhc2VvX3JpZXNnbywgZmlsbCA9IHZhbmNhbl9vdXRjb21lKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIiwgYWVzKHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChhZnRlcl9zdGF0KGNvdW50KSwgIiAoIiwgcm91bmQoYWZ0ZXJfc3RhdChjb3VudCkgLyB0YXBwbHkoYWZ0ZXJfc3RhdChjb3VudCksIGFmdGVyX3N0YXQoeCksIHN1bSlbYWZ0ZXJfc3RhdCh4KV0gKiAxMDAsIDEpLCAiJSkiKSksDQogICAgICAgICAgICBzdGF0ID0gImNvdW50IiwgDQogICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2ZpbGwodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiLi4uLiBSaWVzZ28gZGUgcmFiaWEgc2Vnw7puIHBhc2VvIGNvbiBvIHNpbiBjb3JyZWEiLA0KICAgICAgIGZpbGwgPSAiT3V0Y29tZSIsDQogICAgICAgeCA9ICJSaWVzZ28gUmFiaWEiLA0KICAgICAgIHkgPSAiUHJvcG9yY2nDs24iKSArDQogIGNvb3JkX2ZsaXAoKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA4KSkNCg0KDQpgYGANCg0KDQojIyMjIE9SIG5vIGFqdXN0YWRvcyBzZWfDum4gbml2ZWwgZGUgcmVzdHJpY2Npw7NuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQojQW7DoWxpc2lzIGNydWRvIA0KdmFyaWFibGVzIDwtIGMoICJ2aXZlX2NhbGxlX29ubHkiICwgInZpdmVfY2FsbGVfbGVhc3QiICwgImNhc2FfY2FsbGVfb25seSIgLCAiY2FzYV9jYWxsZV9sZWFzdCIgLCAic2FsZW5fc29sb3NfY2FsbGVfb25seSIgLCAic2FsZW5fc29sb3NfY2FsbGVfbGVhc3QiICwgImNhbl9lc2NhcGVfb25seSIgLCAiY2FuX2VzY2FwZV9sZWFzdCIgLCAidml2ZV9jYXNhX29ubHkiICwgInZpdmVfY2FzYV9sZWFzdCIgLCJuaXZlbF9yZXN0cmljY2lvbl9yaWVzZ28iICkNCg0KDQojIEZ1bmNpw7NuIHBhcmEgYWp1c3RhciBlbCBtb2RlbG8geSBleHRyYWVyIGxvcyByZXN1bHRhZG9zDQpmaXRfYW5kX3N1bW1hcml6ZSA8LSBmdW5jdGlvbih2YXIpIHsNCiAgZm9ybXVsYSA8LSBhcy5mb3JtdWxhKHBhc3RlKCJ2YW5jYW5fb3V0Y29tZV9hIH4iLCB2YXIpKQ0KICBtb2RlbCA8LSBnbG0oZm9ybXVsYSwgZGF0YSA9IGVuY3Vlc3RhXzIwMjMsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkNCiAgdGJsIDwtIHRibF9yZWdyZXNzaW9uKG1vZGVsLCBleHBvbmVudGlhdGUgPSBUUlVFKQ0KICB0YmwgPC0gdGJsICU+JSBtb2RpZnlfaGVhZGVyKGxhYmVsID0gdmFyKQ0KICByZXR1cm4odGJsKQ0KfQ0KDQojIEFqdXN0YXIgZWwgbW9kZWxvIHkgZXh0cmFlciBsb3MgcmVzdWx0YWRvcyBwYXJhIGNhZGEgdmFyaWFibGUNCnJlc3VsdHMgPC0gbGFwcGx5KHZhcmlhYmxlcywgZml0X2FuZF9zdW1tYXJpemUpDQoNCiMgQ29tYmluYXIgbGFzIHRhYmxhcyBkZSByZXN1bHRhZG9zIGVuIHVuYSBzb2xhDQpjb21iaW5lZF9yZXN1bHRzIDwtIHRibF9zdGFjayhyZXN1bHRzKSAlPiUNCiAgbW9kaWZ5X2hlYWRlcihsYWJlbCA9ICJWYXJpYWJsZSIsIGVzdGltYXRlID0gIk9SICg5NSUgQ0kpIikgJT4lDQogIG1vZGlmeV9mb290bm90ZSgNCiAgICBldmVyeXRoaW5nKCkgfiAiRGVzY3JpcGNpw7NuIGRlIHJpZXNnbyBzZWfDum4gbml2ZWwgZGUgcmVzdHJpY2Npw7NuOlxuUmllc2dvIEJham8gPSBIb2dhciBjb24gcGVycm9zIHNvbG8gZW4gY2FzYVxuUmllc2dvIEludGVybWVkaW8gPSBIb2dhciBjb24gcGVycm8gY29uIGFsZ3VuYSBzYWxpZGEgY29udHJvbGFkYSBvIGVzY2FwZXMgb2Nhc2lvbmFsZXNcblJpZXNnbyBBbHRvID0gSG9nYXIgY29uIHBlcnJvcyBlbiBjYWxsZSBvIHF1ZSBlbnRyYSB5IHNhbGUgbGlicmVtZW50ZSINCiAgKQ0KDQojIE1vc3RyYXIgbGEgdGFibGEgY29tYmluYWRhDQpjb21iaW5lZF9yZXN1bHRzDQoNCg0KYGBgDQoNCiMjIyMgT1Igbm8gYWp1c3RhZG9zIGRlIGFjdWVyZG8gYSBzaSBwYXNlYSBvIG5vIGEgc3UgcGVycm8NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCiNBbsOhbGlzaXMgY3J1ZG8gDQp2YXJpYWJsZXMgPC0gYygicGFzZW9fcGVycm9fY2F0IiwgImNhbl9wYXNlb19yaWVzZ28iKQ0KDQojIEZ1bmNpw7NuIHBhcmEgYWp1c3RhciBlbCBtb2RlbG8geSBleHRyYWVyIGxvcyByZXN1bHRhZG9zDQpmaXRfYW5kX3N1bW1hcml6ZSA8LSBmdW5jdGlvbih2YXIpIHsNCiAgZm9ybXVsYSA8LSBhcy5mb3JtdWxhKHBhc3RlKCJ2YW5jYW5fb3V0Y29tZV9hIH4iLCB2YXIpKQ0KICBtb2RlbCA8LSBnbG0oZm9ybXVsYSwgZGF0YSA9IGVuY3Vlc3RhXzIwMjMsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkNCiAgdGJsIDwtIHRibF9yZWdyZXNzaW9uKG1vZGVsLCBleHBvbmVudGlhdGUgPSBUUlVFKQ0KICB0YmwgPC0gdGJsICU+JSBtb2RpZnlfaGVhZGVyKGxhYmVsID0gdmFyKQ0KICByZXR1cm4odGJsKQ0KfQ0KDQojIEFqdXN0YXIgZWwgbW9kZWxvIHkgZXh0cmFlciBsb3MgcmVzdWx0YWRvcyBwYXJhIGNhZGEgdmFyaWFibGUNCnJlc3VsdHMgPC0gbGFwcGx5KHZhcmlhYmxlcywgZml0X2FuZF9zdW1tYXJpemUpDQoNCiMgQ29tYmluYXIgbGFzIHRhYmxhcyBkZSByZXN1bHRhZG9zIGVuIHVuYSBzb2xhDQpjb21iaW5lZF9yZXN1bHRzIDwtIHRibF9zdGFjayhyZXN1bHRzKSAlPiUNCiAgbW9kaWZ5X2hlYWRlcihsYWJlbCA9ICJWYXJpYWJsZSIsIGVzdGltYXRlID0gIk9SICg5NSUgQ0kpIikgJT4lDQogIG1vZGlmeV9mb290bm90ZSgNCiAgICBldmVyeXRoaW5nKCkgfiAiRGVzY3JpcGNpw7NuIGRlIHJpZXNnbyBzZWfDum4gcGFzZW86XG5QYXNlbyBzaW4gcmllc2dvID0gUGFzZW8gY29uIGNvcnJlYVxuUGFzZW8gY29uIHJpZXNnbyA9IFBhc2VvIHNpbiBvIGNvbiBjb3JyZWEiDQogICkNCg0KIyBNb3N0cmFyIGxhIHRhYmxhIGNvbWJpbmFkYQ0KY29tYmluZWRfcmVzdWx0cw0KYGBgDQoNCg0KDQpgYGB7cn0NCg0KYGBgDQoNCg0KYGBge3J9DQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KYGBgDQoNCg0K