IyMgVGhpcyBjYW4gb25seSBiZSBkb25lIGluIGEgbG9jYWxlIHRoYXQgZXh0ZW5kcyBMYXRpbi0xCihpbmYgPC0gbDEwbl9pbmZvKCkpCmlmKCEoaW5mJGBVVEYtOGAgfHwgaW5mJGBMYXRpbi0xYCkpIHsKICAgIHdhcm5pbmcoInRoaXMgdGVzdCBtdXN0IGJlIGRvbmUgaW4gYSBMYXRpbi0xIG9yIFVURi04IGxvY2FsZSIpCiAgICBxKCkKfQoKaW5wIDwtIHJlYWRMaW5lcyhuID0gMikKq0xhdGluLTEgYWNjZW50ZWQgY2hhcnO7OiDp6CD42CDlPMUg5jzGIOkg6egK6egKCmlucAoodHh0IDwtIGljb252KGlucFsxXSwgImxhdGluMSIsICIiKSkKKHBhdCA8LSBpY29udihpbnBbMl0sICJsYXRpbjEiLCAiIikpCmlmKGFueShpcy5uYShjKHR4dCwgcGF0KSkpKSB7CiAgICAjIyBiYWNrdXAgdGVzdAogICAgd2FybmluZygidGhpcyB0ZXN0IG11c3QgYmUgZG9uZSBpbiBhIExhdGluLTEgb3IgVVRGLTggbG9jYWxlIikKICAgIHEoKQp9Cgp0ZXN0aXQgPC0gZnVuY3Rpb24oeCkge3ByaW50KHgpOyBzdG9waWZub3QoaWRlbnRpY2FsKHgsIDFMKSl9CnRlc3RpdChncmVwKHBhdCwgdHh0KSkKdGVzdGl0KGdyZXAocGF0LCB0eHQsIGlnbm9yZS5jYXNlID0gVFJVRSkpCnRlc3RpdChncmVwKHBhdCwgdHh0LCB1c2VCeXRlcyA9IFRSVUUpKQp0ZXN0aXQoZ3JlcChwYXQsIHR4dCwgaWdub3JlLmNhc2UgPSBUUlVFLCB1c2VCeXRlcyA9IFRSVUUpKQp0ZXN0aXQoZ3JlcChwYXQsIHR4dCwgZml4ZWQgPSBUUlVFKSkKdGVzdGl0KGdyZXAocGF0LCB0eHQsIGZpeGVkID0gVFJVRSwgdXNlQnl0ZXMgPSBUUlVFKSkKdGVzdGl0KGdyZXAocGF0LCB0eHQsIHBlcmwgPSBUUlVFKSkKdGVzdGl0KGdyZXAocGF0LCB0eHQsIGlnbm9yZS5jYXNlID0gVFJVRSwgcGVybCA9IFRSVUUpKQp0ZXN0aXQoZ3JlcChwYXQsIHR4dCwgcGVybCA9IFRSVUUsIHVzZUJ5dGVzID0gVFJVRSkpCnRlc3RpdChncmVwKHBhdCwgdHh0LCBpZ25vcmUuY2FzZSA9IFRSVUUsIHBlcmwgPSBUUlVFLCB1c2VCeXRlcyA9IFRSVUUpKQp0ZXN0aXQoZ3JlcCh0b3VwcGVyKHBhdCksIHR4dCwgaWdub3JlLmNhc2UgPSBUUlVFKSkKdGVzdGl0KGdyZXAodG91cHBlcihwYXQpLCB0eHQsIGlnbm9yZS5jYXNlID0gVFJVRSwgcGVybCA9IFRSVUUpKQojIyBtYXRjaGVzIGluIExhdGluLTEgYnV0IG5vdCBpbiBVVEYtOApncmVwKHRvdXBwZXIocGF0KSwgdHh0LCBpZ25vcmUuY2FzZSA9IFRSVUUsIHBlcmwgPSBUUlVFLCB1c2VCeXRlcyA9IFRSVUUpCgoocjEgPC0gcmVnZXhwcigiZW4iLCB0eHQsIGZpeGVkPVRSVUUpKQoocjIgPC0gcmVnZXhwcigiZW4iLCB0eHQsIGZpeGVkPVRSVUUsIHVzZUJ5dGVzPVRSVUUpKQpzdG9waWZub3QoaWRlbnRpY2FsKHIxLCByZWdleHByKCJlbiIsIHR4dCkpKQpzdG9waWZub3QoaWRlbnRpY2FsKHIyLCByZWdleHByKCJlbiIsIHR4dCwgdXNlQnl0ZXMgPSBUUlVFKSkpCnN0b3BpZm5vdChpZGVudGljYWwocjEsIHJlZ2V4cHIoImVuIiwgdHh0LCBwZXJsPVRSVUUpKSkKc3RvcGlmbm90KGlkZW50aWNhbChyMiwgcmVnZXhwcigiZW4iLCB0eHQsIHBlcmw9VFJVRSwgdXNlQnl0ZXM9VFJVRSkpKQpzdG9waWZub3QoaWRlbnRpY2FsKHIxLCByZWdleHByKCJFTiIsIHR4dCwgaWdub3JlLmNhc2U9VFJVRSkpKQpzdG9waWZub3QoaWRlbnRpY2FsKHIyLCByZWdleHByKCJFTiIsIHR4dCwgaWdub3JlLmNhc2U9VFJVRSwgdXNlQnl0ZXM9VFJVRSkpKQpzdG9waWZub3QoaWRlbnRpY2FsKHIxLCByZWdleHByKCJFTiIsIHR4dCwgaWdub3JlLmNhc2U9VFJVRSwgcGVybD1UUlVFKSkpCnN0b3BpZm5vdChpZGVudGljYWwocjIsIHJlZ2V4cHIoIkVOIiwgdHh0LCBpZ25vcmUuY2FzZT1UUlVFLCBwZXJsPVRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlQnl0ZXM9VFJVRSkpKQoKKHIxIDwtIHJlZ2V4cHIocGF0LCB0eHQsIGZpeGVkPVRSVUUpKQoocjIgPC0gcmVnZXhwcihwYXQsIHR4dCwgZml4ZWQ9VFJVRSwgdXNlQnl0ZXM9VFJVRSkpCnN0b3BpZm5vdChpZGVudGljYWwocjEsIHJlZ2V4cHIocGF0LCB0eHQpKSkKc3RvcGlmbm90KGlkZW50aWNhbChyMiwgcmVnZXhwcihwYXQsIHR4dCwgdXNlQnl0ZXM9VFJVRSkpKQpzdG9waWZub3QoaWRlbnRpY2FsKHIxLCByZWdleHByKHBhdCwgdHh0LCBwZXJsPVRSVUUpKSkKc3RvcGlmbm90KGlkZW50aWNhbChyMiwgcmVnZXhwcihwYXQsIHR4dCwgcGVybD1UUlVFLCB1c2VCeXRlcz1UUlVFKSkpCnN0b3BpZm5vdChpZGVudGljYWwocjEsIHJlZ2V4cHIocGF0LCB0eHQsIGlnbm9yZS5jYXNlPVRSVUUpKSkKc3RvcGlmbm90KGlkZW50aWNhbChyMiwgcmVnZXhwcihwYXQsIHR4dCwgaWdub3JlLmNhc2U9VFJVRSwgdXNlQnl0ZXM9VFJVRSkpKQpzdG9waWZub3QoaWRlbnRpY2FsKHIxLCByZWdleHByKHBhdCwgdHh0LCBpZ25vcmUuY2FzZT1UUlVFLCBwZXJsPVRSVUUpKSkKc3RvcGlmbm90KGlkZW50aWNhbChyMiwgcmVnZXhwcihwYXQsIHR4dCwgaWdub3JlLmNhc2U9VFJVRSwgcGVybD1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUJ5dGVzPVRSVUUpKSkKcGF0MiA8LSB0b3VwcGVyKHBhdCkKc3RvcGlmbm90KGlkZW50aWNhbChyMSwgcmVnZXhwcihwYXQyLCB0eHQsIGlnbm9yZS5jYXNlPVRSVUUpKSkKc3RvcGlmbm90KGlkZW50aWNhbChyMSwgcmVnZXhwcihwYXQyLCB0eHQsIGlnbm9yZS5jYXNlPVRSVUUsIHBlcmw9VFJVRSkpKQojIyB3aWxsIG5vdCBtYXRjaCBpbiBhIFVURi04IGxvY2FsZQpyZWdleHByKHBhdDIsIHR4dCwgaWdub3JlLmNhc2U9VFJVRSwgcGVybD1UUlVFLCB1c2VCeXRlcz1UUlVFKQoKCihyMSA8LSBncmVnZXhwcihwYXQsIHR4dCwgZml4ZWQ9VFJVRSkpCihyMiA8LSBncmVnZXhwcihwYXQsIHR4dCwgZml4ZWQ9VFJVRSwgdXNlQnl0ZXM9VFJVRSkpCnN0b3BpZm5vdChpZGVudGljYWwocjEsIGdyZWdleHByKHBhdCwgdHh0KSkpCnN0b3BpZm5vdChpZGVudGljYWwocjIsIGdyZWdleHByKHBhdCwgdHh0LCB1c2VCeXRlcz1UUlVFKSkpCnN0b3BpZm5vdChpZGVudGljYWwocjEsIGdyZWdleHByKHBhdCwgdHh0LCBwZXJsPVRSVUUpKSkKc3RvcGlmbm90KGlkZW50aWNhbChyMiwgZ3JlZ2V4cHIocGF0LCB0eHQsIHBlcmw9VFJVRSwgdXNlQnl0ZXM9VFJVRSkpKQpzdG9waWZub3QoaWRlbnRpY2FsKHIxLCBncmVnZXhwcihwYXQsIHR4dCwgaWdub3JlLmNhc2U9VFJVRSkpKQpzdG9waWZub3QoaWRlbnRpY2FsKHIyLCBncmVnZXhwcihwYXQsIHR4dCwgaWdub3JlLmNhc2U9VFJVRSwgdXNlQnl0ZT1UUlVFKSkpCnN0b3BpZm5vdChpZGVudGljYWwocjEsIGdyZWdleHByKHBhdCwgdHh0LCBpZ25vcmUuY2FzZT1UUlVFLCBwZXJsPVRSVUUpKSkKc3RvcGlmbm90KGlkZW50aWNhbChyMiwgZ3JlZ2V4cHIocGF0LCB0eHQsIGlnbm9yZS5jYXNlPVRSVUUsIHBlcmw9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlQnl0ZXM9VFJVRSkpKQoKdHh0MiA8LSBjKCJUaGUiLCAibGljZW5zZXMiLCAiZm9yIiwgIm1vc3QiLCAic29mdHdhcmUiLCAiYXJlIiwKICAiZGVzaWduZWQiLCAidG8iLCAidGFrZSIsICJhd2F5IiwgInlvdXIiLCAiZnJlZWRvbSIsCiAgInRvIiwgInNoYXJlIiwgImFuZCIsICJjaGFuZ2UiLCAiaXQuIiwKICAgIiIsICJCeSIsICJjb250cmFzdCwiLCAidGhlIiwgIkdOVSIsICJHZW5lcmFsIiwgIlB1YmxpYyIsICJMaWNlbnNlIiwKICAgImlzIiwgImludGVuZGVkIiwgInRvIiwgImd1YXJhbnRlZSIsICJ5b3VyIiwgImZyZWVkb20iLCAidG8iLAogICAic2hhcmUiLCAiYW5kIiwgImNoYW5nZSIsICJmcmVlIiwgInNvZnR3YXJlIiwgIi0tIiwKICAgInRvIiwgIm1ha2UiLCAic3VyZSIsICJ0aGUiLCAic29mdHdhcmUiLCAiaXMiLAogICAiZnJlZSIsICJmb3IiLCAiYWxsIiwgIml0cyIsICJ1c2VycyIpCiggaSA8LSBncmVwKCJbZ3VdIiwgdHh0MiwgcGVybCA9IFRSVUUpICkKc3RvcGlmbm90KGlkZW50aWNhbChpLCBncmVwKCJbZ3VdIiwgdHh0MikpKQojIyByZXN1bHRzIGRlcGVuZCBvbiB0aGUgbG9jYWxlCihvdCA8LSBzdWIoIltiLWVdIiwiLiIsIHR4dDIsIHBlcmwgPSBUUlVFKSkKdHh0MltvdCAhPSBzdWIoIltiLWVdIiwiLiIsIHR4dDIpXQoob3QgPC0gc3ViKCJbYi1lXSIsIi4iLCB0eHQyLCBpZ25vcmUuY2FzZSA9IFRSVUUsIHBlcmwgPSBUUlVFKSkKdHh0MltvdCAhPSBzdWIoIltiLWVdIiwiLiIsIHR4dDIsIGlnbm9yZS5jYXNlID0gVFJVRSldCgoKIyMgVGhlc2UgbWF5IGVuZCB1cCB3aXRoIGRpZmZlcmVudCBlbmNvZGluZ3M6ID09IGNvcGVzLCBpZGVudGljYWwgZG9lcyBub3QKCmVxIDwtIGZ1bmN0aW9uKGEsIGIpIGEgPT0gYgoocjEgPC0gZ3N1YihwYXQsICJlZiIsIHR4dCkpCnN0b3BpZm5vdChlcShyMSwgZ3N1YihwYXQsICJlZiIsIHR4dCwgdXNlQnl0ZXMgPSBUUlVFKSkpCnN0b3BpZm5vdChlcShyMSwgZ3N1YihwYXQsICJlZiIsIHR4dCwgZml4ZWQgPSBUUlVFKSkpCnN0b3BpZm5vdChlcShyMSwgZ3N1YihwYXQsICJlZiIsIHR4dCwgZml4ZWQgPSBUUlVFLCB1c2VCeXRlcyA9IFRSVUUpKSkKc3RvcGlmbm90KGVxKHIxLCBnc3ViKHBhdCwgImVmIiwgdHh0LCBwZXJsID0gVFJVRSkpKQpzdG9waWZub3QoZXEocjEsIGdzdWIocGF0LCAiZWYiLCB0eHQsIHBlcmwgPSBUUlVFLCB1c2VCeXRlcyA9IFRSVUUpKSkKCnBhdCA8LSBzdWJzdHIocGF0LCAxLCAxKQoocjEgPC0gZ3N1YihwYXQsICJnaCIsIHR4dCkpCnN0b3BpZm5vdChlcShyMSwgZ3N1YihwYXQsICJnaCIsIHR4dCwgdXNlQnl0ZXMgPSBUUlVFKSkpCnN0b3BpZm5vdChlcShyMSwgZ3N1YihwYXQsICJnaCIsIHR4dCwgZml4ZWQgPSBUUlVFKSkpCnN0b3BpZm5vdChlcShyMSwgZ3N1YihwYXQsICJnaCIsIHR4dCwgZml4ZWQgPSBUUlVFLCB1c2VCeXRlcyA9IFRSVUUpKSkKc3RvcGlmbm90KGVxKHIxLCBnc3ViKHBhdCwgImdoIiwgdHh0LCBwZXJsID0gVFJVRSkpKQpzdG9waWZub3QoZXEocjEsIGdzdWIocGF0LCAiZ2giLCB0eHQsIHBlcmwgPSBUUlVFLCB1c2VCeXRlcyA9IFRSVUUpKSkKCgpzdG9waWZub3QoaWRlbnRpY2FsKGdzdWIoImEqIiwgIngiLCAiYmFhYWMiKSwgInhieGN4IikpCnN0b3BpZm5vdChpZGVudGljYWwoZ3N1YigiYSoiLCAieCIsICJiYWFhYyIpLCAieGJ4Y3giKSwgcGVybCA9IFRSVUUpCnN0b3BpZm5vdChpZGVudGljYWwoZ3N1YigiYSoiLCAieCIsICJiYWFhYyIpLCAieGJ4Y3giKSwgdXNlQnl0ZXMgPSBUUlVFKQpzdG9waWZub3QoaWRlbnRpY2FsKGdzdWIoImEqIiwgIngiLCAiYmFhYWMiKSwgInhieGN4IiksIHBlcmwgPSBUUlVFLCB1c2VCeXRlcyA9IFRSVUUpCgojIyB0aGlzIG9uZSBzZWVtcyBzeXN0ZW0tZGVwZW5kZW50Cih4IDwtIGdzdWIoIlxcYiIsICJ8IiwgIlRoZSBxdWljayBicm93biBcdWU4XHVlOSIsIHBlcmwgPSBUUlVFKSkKIyBzdG9waWZub3QoaWRlbnRpY2FsKHgsICJ8VGhlfCB8cXVpY2t8IHxicm93bnwgfFx1ZThcdWU5fCIpKQooeCA8LSBnc3ViKCJcXGIiLCAifCIsICJUaGUgcXVpY2sgYnJvd24gZm94IiwgcGVybCA9IFRSVUUpKQpzdG9waWZub3QoaWRlbnRpY2FsKHgsICJ8VGhlfCB8cXVpY2t8IHxicm93bnwgfGZveHwiKSkKIyMgVGhlIGZvbGxvd2luZyBpcyB3YXJuZWQgYWdhaW5zdCBpbiB0aGUgaGVscCBwYWdlLCBidXQgd29ya2VkIGluIHNvbWUgdmVyc2lvbnMKZ3N1YigiXFxiIiwgInwiLCAiVGhlIHF1aWNrIGJyb3duIGZveCIpCgooeiA8LSBzdHJzcGxpdCh0eHQsIHBhdClbWzFdXSkKc3RvcGlmbm90KGVxKHosIHN0cnNwbGl0KHR4dCwgcGF0LCB1c2VCeXRlcyA9IFRSVUUpW1sxXV0pKQpzdG9waWZub3QoZXEoeiwgc3Ryc3BsaXQodHh0LCBwYXQsIGZpeGVkID0gVFJVRSlbWzFdXSkpCnN0b3BpZm5vdChlcSh6LCBzdHJzcGxpdCh0eHQsIHBhdCwgZml4ZWQgPSBUUlVFLCB1c2VCeXRlcyA9IFRSVUUpW1sxXV0pKQpzdG9waWZub3QoZXEoeiwgc3Ryc3BsaXQodHh0LCBwYXQsIHBlcmwgPSBUUlVFKVtbMV1dKSkKc3RvcGlmbm90KGVxKHosIHN0cnNwbGl0KHR4dCwgcGF0LCBwZXJsID0gVFJVRSwgdXNlQnl0ZXMgPSBUUlVFKVtbMV1dKSkKCih6IDwtIHN0cnNwbGl0KHR4dCwgIlthLWNdIilbWzFdXSkKc3RvcGlmbm90KGVxKHosIHN0cnNwbGl0KHR4dCwgIlthLWNdIiwgdXNlQnl0ZXMgPSBUUlVFKVtbMV1dKSkKc3RvcGlmbm90KGVxKHosIHN0cnNwbGl0KHR4dCwgIlthLWNdIiwgcGVybCA9IFRSVUUpW1sxXV0pKQpzdG9waWZub3QoZXEoeiwgc3Ryc3BsaXQodHh0LCAiW2EtY10iLCBwZXJsID0gVFJVRSwgdXNlQnl0ZXMgPSBUUlVFKVtbMV1dKSkKCiMjIHN0cnNwbGl0IGRpZCBub3QgdXNlQnl0ZXMgY29ycmVjdGx5IGluIFBPU0lYIG1vZGUgaW4gUiA8IDQuMiBhcwojIyBNQkNTIHdvdWxkIHN0aWxsIGJlIGludGVycHJldGVkCnggPC0gIlx4ZjFceGExX1x4YzVceGEyIgpzcGxpdC5hIDwtIGxpc3QoYygiXHhmMVx4YTEiLCAiXHhjNVx4YTIiKSkKc3BsaXQuYiA8LSBsaXN0KGMoIlx4ZjEiLCAiX1x4YzVceGEyIikpCnN0b3BpZm5vdChpZGVudGljYWwoc3Ryc3BsaXQoeCwgIl8iLCB1c2VCeXRlcz1UUlVFLCBwZXJsPVRSVUUpLCBzcGxpdC5hKSwKICAgICAgICAgIGlkZW50aWNhbChzdHJzcGxpdCh4LCAiXHhhMSIsIHVzZUJ5dGVzPVRSVUUsIHBlcmw9VFJVRSksIHNwbGl0LmIpLAogICAgICAgICAgaWRlbnRpY2FsKHN0cnNwbGl0KHgsICJfIiwgdXNlQnl0ZXM9VFJVRSksIHNwbGl0LmEpLAogICAgICAgICAgaWRlbnRpY2FsKHN0cnNwbGl0KHgsICJceGExIiwgdXNlQnl0ZXM9VFJVRSksIHNwbGl0LmIpKQoKIyMgc3Ryc3BsaXQgaW4gUiA8IDQuMiBtYXJrZWQgb3V0cHV0cyB3aGVuIHVzaW5nIGJ5dGVzIChpdCBzaG91bGRuJ3QpCnggPC0geGIgPC0geHUgPC0gIlxVMUY2MDAiCkVuY29kaW5nKHhiKSA8LSAiYnl0ZXMiCkVuY29kaW5nKHh1KSA8LSAidW5rbm93biIKeDk4IDwtICJceDk4IgpFbmNvZGluZyh4OTgpIDwtICJieXRlcyIKc3BsaXQuYSA8LSBjKCJceGYwIiwgIlx4OWYiLCAiXHg5OCIsICJceDgwIikKRW5jb2Rpbmcoc3BsaXQuYSkgPC0gInVua25vd24iCnNwbGl0LmIgPC0gYygiXHhmMCIsICJceDk4IikKRW5jb2Rpbmcoc3BsaXQuYikgPC0gInVua25vd24iCnNwbGl0LmMgPC0gYygiXHhmMFx4OWYiLCAiXHg4MCIpCkVuY29kaW5nKHNwbGl0LmMpIDwtICJ1bmtub3duIgojIyBBcmUgdHdvIGNoYXJhY3RlciB2ZWN0b3JzIHRydWx5IGlkZW50aWNhbD8KaWRlbnRpY2hyIDwtIGZ1bmN0aW9uKHgsIHkpIHsKICAgIGlmIChpcy5jaGFyYWN0ZXIoeCkgJiYKICAgICAgICBpcy5jaGFyYWN0ZXIoeSkgJiYKICAgICAgICBpZGVudGljYWwoRW5jb2RpbmcoeCksIEVuY29kaW5nKHkpKQogICAgKSB7CiAgICAgICAgRW5jb2RpbmcoeCkgPC0gImJ5dGVzIgogICAgICAgIEVuY29kaW5nKHkpIDwtICJieXRlcyIKICAgICAgICBpZGVudGljYWwoeCwgeSkKICAgIH0gZWxzZSBGQUxTRQp9CnN0b3BpZm5vdCgKICAgIGlkZW50aWNocihzdHJzcGxpdCh4LCAiIiwgdXNlQnl0ZXM9VFJVRSlbWzFdXSwgc3Ryc3BsaXQoeGIsICIiKVtbMV1dKSwKICAgIGlkZW50aWNocihzdHJzcGxpdCh4dSwgIiIsIHVzZUJ5dGVzPVRSVUUpW1sxXV0sIHN0cnNwbGl0KHhiLCAiIilbWzFdXSksCiAgICBpZGVudGljaHIoc3Ryc3BsaXQoeGIsICIiKVtbMV1dLCBzcGxpdC5hKSwKICAgIGlkZW50aWNocihzdHJzcGxpdCh4LCAiW1x4ODBceDlmXSIsIHVzZUJ5dGVzPVRSVUUpW1sxXV0sIHNwbGl0LmIpLAogICAgaWRlbnRpY2hyKHN0cnNwbGl0KHgsICJbXHg4MFx4OWZdIiwgdXNlQnl0ZXM9VFJVRSwgcGVybD1UUlVFKVtbMV1dLCBzcGxpdC5iKSwKICAgIGlkZW50aWNocihzdHJzcGxpdCh4LCAiXHg5OCIsIHVzZUJ5dGVzPVRSVUUsIGZpeGVkPVRSVUUpW1sxXV0sIHNwbGl0LmMpLAogICAgaWRlbnRpY2hyKHN0cnNwbGl0KHgsIHg5OCwgZml4ZWQ9VFJVRSlbWzFdXSwgc3BsaXQuYykpCmlmKGwxMG5faW5mbygpW1snTGF0aW4tMSddXSkgewogICAgeGwgPC0geAogICAgRW5jb2RpbmcoeGwpIDwtICJsYXRpbjEiCiAgICBzdG9waWZub3QoRW5jb2Rpbmcoc3Ryc3BsaXQoeGwsICIiLCB1c2VCeXRlcz1UUlVFKVtbMV1dKSA9PSAidW5rbm93biIsCiAgICAgICAgICAgICAgRW5jb2Rpbmcoc3Ryc3BsaXQoeGwsICIiKVtbMV1dKSA9PSAibGF0aW4xIiwKICAgICAgICAgICAgICBFbmNvZGluZyhzdHJzcGxpdCh4bCwgIlx4OTgiKVtbMV1dKSA9PSAibGF0aW4xIiwKICAgICAgICAgICAgICBFbmNvZGluZyhzdHJzcGxpdCh4bCwgeDk4KVtbMV1dKSA9PSAidW5rbm93biIpCn0KCiMjIGZyb20gc3Ryc3BsaXQuUmQKeiA8LSBzdHJzcGxpdCgiQSB0ZXh0IEkgd2FudCB0byBkaXNwbGF5IHdpdGggc3BhY2VzIiwgTlVMTClbWzFdXQpzdG9waWZub3QoaWRlbnRpY2FsKHosCiAgICAgICAgICAgICAgICAgICAgc3Ryc3BsaXQoIkEgdGV4dCBJIHdhbnQgdG8gZGlzcGxheSB3aXRoIHNwYWNlcyIsICIiKVtbMV1dKSkKCnggPC0gYyhhcyA9ICJhc2ZlZiIsIHF1ID0gInF3ZXJ0eSIsICJ5dWlvcFsiLCAiYiIsICJzdHVmZi5ibGFoLnllY2giKQooeiA8LSBzdHJzcGxpdCh4LCAiZSIpKQpzdG9waWZub3QoaWRlbnRpY2FsKHosIHN0cnNwbGl0KHgsICJlIiwgdXNlQnl0ZXMgPSBUUlVFKSkpCnN0b3BpZm5vdChpZGVudGljYWwoeiwgc3Ryc3BsaXQoeCwgImUiLCBmaXhlZCA9IFRSVUUpKSkKc3RvcGlmbm90KGlkZW50aWNhbCh6LCBzdHJzcGxpdCh4LCAiZSIsIGZpeGVkID0gVFJVRSwgdXNlQnl0ZXMgPSBUUlVFKSkpCnN0b3BpZm5vdChpZGVudGljYWwoeiwgc3Ryc3BsaXQoeCwgImUiLCBwZXJsID0gVFJVRSkpKQpzdG9waWZub3QoaWRlbnRpY2FsKHosIHN0cnNwbGl0KHgsICJlIiwgcGVybCA9IFRSVUUsIHVzZUJ5dGVzID0gVFJVRSkpKQoKIyMgbW92ZWQgZnJvbSByZWctdGVzdHMtMWIuUi4KIyMgZmFpbHMgdG8gbWF0Y2ggb24gQ3lnd2luLCBNYXIgMjAxMQojIyByZWdleHByKGZpeGVkID0gVFJVRSkgd2l0aCBhIHNpbmdsZS1ieXRlIHBhdHRlcm4gbWF0Y2hpbmcgdG8gYSBNQkNTIHN0cmluZwp4IDwtIGljb252KCJmYVx4RTdpbGUgYSAiLCAibGF0aW4xIiwgIlVURi04IikKc3RvcGlmbm90KGlkZW50aWNhbChyZWdleHByKCIgIiwgeCksIHJlZ2V4cHIoIiAiLCB4LCBmaXhlZD1UUlVFKSkpCiMgZml4ZWQ9VFJVRSByZXBvcnRlZCBtYXRjaCBwb3NpdGlvbiBpbiBieXRlcyBpbiBSIDw9IDIuMTAuMApzdG9waWZub3QoaWRlbnRpY2FsKHJlZ2V4cHIoIiBhIiwgeCksIHJlZ2V4cHIoIiBhIiwgeCwgZml4ZWQ9VFJVRSkpKQojIyBhbHdheXMgd29ya2VkLgoKIyMgdGhpcyBicm9rZSBhbmQgc2VnZmF1bHRlZCBpbiAyLjEzLjEgYW5kIGVhcmxpZXIgKFBSIzE0NjI3KQp4IDwtIHBhc3RlKHJlcCgiYSAiLCA2MDApLCBjb2xsYXBzZT0iIikKdGVzdGl0KGFncmVwKHgsIHgpKQp0ZXN0aXQoYWdyZXAoeCwgeCwgbWF4LmRpc3RhbmNlPTAuNSkpCgojIyB0aGlzIGlzIHVzZWQgaW4gUUMgdG8gY2hlY2sgZGVwZW5kZW5jaWVzIGFuZCB3YXMgYnJva2VuIGludGVybWl0dGVudGx5IGJ5IFRSRSBjaGFuZ2VzCnN0b3BpZm5vdChpc1RSVUUoZ3JlcGwoJ15bWzpzcGFjZTpdXSooUnxbWzphbHBoYTpdXVtbOmFsbnVtOl0uXSpbWzphbG51bTpdXSkoW1s6c3BhY2U6XV0qXFwoKFteKSBdKylbWzpzcGFjZTpdXSsoW14pIF0rKVxcKSk/W1s6c3BhY2U6XV0qJCcsICcgUiAoPj0gMi4xMy4wKSAnKSkpCgojIyBCYWQgc3ViKCkgYW5kIGdzdWIoKSB3aXRoIHNvbWUgcmVnZXhwcnMgUFIjMTYwMDkKeCA8LSBjKE5BLCAiICBhYmMiLCAiYSBiIGMgICAgIiwgImEgIGIgYyIpCih5IDwtIGdzdWIoIlxcc3syLH0iLCAiICIsIHgpKQpzdG9waWZub3QoeVstMV0gPT0gYygiIGFiYyIsICJhIGIgYyAiLCAiYSBiIGMiKSkKeCA8LSBjKCJcdWU0IiwgIiAgYWJjIiwgImEgYiBjICAgICIsICJhICBiIGMiKQooeSA8LSBnc3ViKCJcXHN7Mix9IiwgIiAiLCB4KSkKc3RvcGlmbm90KHkgPT0gYyh4WzFdLCAiIGFiYyIsICJhIGIgYyAiLCAiYSBiIGMiKSkKIyMgcmVzdWx0cyB3ZXJlIGMoeFsxXSwgIiAiLCAiICIsICIgIikgaW4gYm90aCBjYXNlcyBpbiBSIDMuMS4xCgojIyBCYWQgbWFwcGluZyBvZiBjb2RlIHBvaW50cyB0byBjaGFyYWN0ZXJzIHdpdGggc3Vycm9nYXRlIHBhaXJzIChpbiBSIDQuMCkKc3RvcGlmbm90KHJlZ2V4cHIoImIiLCAiXFUwMDAxRjkzN2IiLCBwZXJsID0gVFJVRSkgPT0gMikKCiMjIE1peGVkIE1CQ1MgYW5kICJieXRlcyIgZW5jb2RlZCwgcmVncmVzc2lvbiBpbiByNzM1NjkgKEJ1Z3ppbGxhIDE4MDIxKQp4IDwtIHJlcCgiXHUwMGU5YWIiLCAyKQpFbmNvZGluZyh4WzJdKSA8LSAiYnl0ZXMiCnJlcyA8LSBjKCJhIiwgImEiKQpzdG9waWZub3QoaWRlbnRpY2FsKHJlZ21hdGNoZXMoeCwgcmVnZXhwcigiYSIsIHgsIHBlcmw9VFJVRSkpLCByZXMpLAogICAgICAgICAgaWRlbnRpY2FsKHJlZ21hdGNoZXMoeCwgcmVnZXhwcigiYSIsIHgpKSwgcmVzKSwKICAgICAgICAgIGlkZW50aWNhbCh1bmxpc3QocmVnbWF0Y2hlcyh4LCByZWdleHByKCJhIiwgeCwgcGVybD1UUlVFKSkpLCByZXMpLAogICAgICAgICAgaWRlbnRpY2FsKHVubGlzdChyZWdtYXRjaGVzKHgsIHJlZ2V4cHIoImEiLCB4KSkpLCByZXMpLAogICAgICAgICAgaWRlbnRpY2FsKHVubGlzdChyZWdtYXRjaGVzKHgsIHJlZ2V4ZWMoImEiLCB4LCBwZXJsPVRSVUUpKSksIHJlcyksCiAgICAgICAgICBpZGVudGljYWwodW5saXN0KHJlZ21hdGNoZXMoeCwgcmVnZXhlYygiYSIsIHgpKSksIHJlcyksCiAgICAgICAgICAjIyBGaXhlZCA9IFRSVUUKICAgICAgICAgIGlkZW50aWNhbChyZWdtYXRjaGVzKHgsIHJlZ2V4cHIoImEiLCB4LCBmaXhlZD1UUlVFKSksIHJlcyksCiAgICAgICAgICBpZGVudGljYWwodW5saXN0KHJlZ21hdGNoZXMoeCwgcmVnZXhwcigiYSIsIHgsIGZpeGVkPVRSVUUpKSksIHJlcyksCiAgICAgICAgICBpZGVudGljYWwodW5saXN0KHJlZ21hdGNoZXMoeCwgcmVnZXhlYygiYSIsIHgsIGZpeGVkPVRSVUUpKSksIHJlcykpCgojIyBCeXRlcyBpbmRleCBjb21wdXRhdGlvbiBvbiBBU0NJSSB1c2VkIGFzICJjaGFyYWN0ZXIiIG9uIG5vbi1BU0NJSQojIyBJZGVudGljYWwgaXRzZWxmIHByb2R1Y2VzIGVycm9yIGlmIHdlIGVuZCB1cCB3aXRoIGJ5dGUgZW5jb2RlZAojIyB2YWx1ZXMsIHdoaWNoIGlzIHdoYXQgd2UncmUgdHJ5aW5nIHRvIGF2b2lkLgoKeCA8LSByZXAoImVhYiIsIDIpCnkgPC0gYygiZWFiIiwgImVcdTAzYjFiIikKcmVzIDwtIGMoImEiLCAiXHUwM2IxIikKc3RvcGlmbm90KGlkZW50aWNhbChyZWdtYXRjaGVzKHksIHJlZ2V4cHIoImEiLCB4KSksIHJlcyksCiAgICAgICAgICBpZGVudGljYWwocmVnbWF0Y2hlcyh5LCByZWdleHByKCJhIiwgeCwgcGVybD1UUlVFKSksIHJlcyksCiAgICAgICAgICBpZGVudGljYWwodW5saXN0KHJlZ21hdGNoZXMoeSwgZ3JlZ2V4cHIoImEiLCB4KSkpLCByZXMpLAogICAgICAgICAgaWRlbnRpY2FsKHVubGlzdChyZWdtYXRjaGVzKHksIGdyZWdleHByKCJhIiwgeCwgcGVybD1UUlVFKSkpLCByZXMpLAogICAgICAgICAgaWRlbnRpY2FsKHVubGlzdChyZWdtYXRjaGVzKHksIHJlZ2V4ZWMoImEiLCB4KSkpLCByZXMpLAogICAgICAgICAgaWRlbnRpY2FsKHVubGlzdChyZWdtYXRjaGVzKHksIHJlZ2V4ZWMoImEiLCB4LCBwZXJsPVRSVUUpKSksIHJlcyksCiAgICAgICAgICAjIyBGaXhlZCA9IFRSVUUKICAgICAgICAgIGlkZW50aWNhbChyZWdtYXRjaGVzKHksIHJlZ2V4cHIoImEiLCB4LCBmaXhlZD1UUlVFKSksIHJlcyksCiAgICAgICAgICBpZGVudGljYWwodW5saXN0KHJlZ21hdGNoZXMoeSwgZ3JlZ2V4cHIoImEiLCB4LCBmaXhlZD1UUlVFKSkpLCByZXMpLAogICAgICAgICAgaWRlbnRpY2FsKHVubGlzdChyZWdtYXRjaGVzKHksIHJlZ2V4ZWMoImEiLCB4LCBmaXhlZD1UUlVFKSkpLCByZXMpKQoKIyMgVGhpcyBpcyBhbiBhZGFwdGVkIGBncmVnZXhlY2AgaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgZXhhbXBsZSBvZiBgP2dyZXBgLgojIyBXZSB3aWxsIHVzZSBpdCB0byB0ZXN0IGBncmVnZXhlY2AuCmV4X2ZuIDwtIGZ1bmN0aW9uKHBhdHRlcm4sIHRleHQsIHVzZUJ5dGVzID0gRkFMU0UsIHBlcmwgPSBGQUxTRSkgewogICAgbGFwcGx5KAogICAgICAgIHJlZ21hdGNoZXMoCiAgICAgICAgICAgIHRleHQsCiAgICAgICAgICAgIGdyZWdleHByKHBhdHRlcm4sIHRleHQsIHVzZUJ5dGVzID0gdXNlQnl0ZXMsIHBlcmwgPSBwZXJsKQogICAgICAgICksCiAgICAgICAgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBwb3MgPC0gcmVnZXhlYyhwYXR0ZXJuLCBlLCB1c2VCeXRlcyA9IHVzZUJ5dGVzLCBwZXJsID0gcGVybCkKICAgICAgICAgICAgcmVzIDwtIHJlZ21hdGNoZXMoZSwgcG9zKQogICAgICAgICAgICBpZihsZW5ndGgocmVzKSkgZG8uY2FsbChjYmluZCwgcmVzKSBlbHNlIGNoYXJhY3RlcigpCiAgICAgICAgfQogICAgKQp9CgojIyBDYXB0dXJlcyBwYXR0ZXJucyBsaWtlIExFVFRFUlMxMjMgKHBsdXMgYSBjb3VwbGUgb2YgVW5pY29kZSBjaGFycykuIApwLjEucmF3IDwtICIoPzouKiApPyglc1tbOmFscGhhOl1cdTAwZTlcdTAwZDZdKykoJXNbWzpkaWdpdDpdXSspKD86IC4qKT8iCnAuMSA8LSBzcHJpbnRmKHAuMS5yYXcsICIiLCAiIikKcC4xbiA8LSBzcHJpbnRmKHAuMS5yYXcsICI/PGE+IiwgIj88Yj4iKSAgICMjIG5hbWVkIGNhcHR1cmUgZ3JvdXBzCnMudXRmOCA8LSAgIkhcdTAwZTkzMjArV1x1MDBkNjQxIgpzLjEgPC0gYygKICAgICJUZXN0OiBBMS1CQzIzIGJvbyIsICMjIG1hdGNoZXMgYW5kIGV4dHJhCiAgICAiREUzNSIsICAgICAgICAgICAgICAjIyBvbmUgZnVsbCBtYXRjaAogICAgImJvbyIsICAgICAgICAgICAgICAgIyMgbm9tYXRjaAogICAgTkEsICAgICAgICAgICAgICAgICAgIyMgTkEKICAgIHMudXRmOCAgICAgICAgICAgICAgICMjIFVURjggc3RyaW5nCikKZ3IgICAgICAgICA8LSBncmVnZXhlYyhwLjEsIHMuMSwgcGVybD1GQUxTRSkKZ3IudWIgICAgICA8LSBncmVnZXhlYyhwLjEsIHMuMSwgcGVybD1GQUxTRSwgdXNlQnl0ZXM9VFJVRSkKZ3IucGVybCAgICA8LSBncmVnZXhlYyhwLjFuLCBzLjEsIHBlcmw9VFJVRSkgCmdyLnBlcmwudWIgPC0gZ3JlZ2V4ZWMocC4xbiwgcy4xLCBwZXJsPVRSVUUsIHVzZUJ5dGVzPVRSVUUpIAoKbS5nciAgICAgICA8LSByZWdtYXRjaGVzKHMuMSwgZ3IpCm0uZ3IgICAgICAgIyBpbnNwZWN0IHZpc3VhbGx5CgptLmdyLnViICAgIDwtIHJlZ21hdGNoZXMocy4xLCBnci51YikKRW5jb2RpbmcobS5nci51YltbNUxdXSkgPC0gIlVURi04IgptLmdyLnViLmV4IDwtIGV4X2ZuKHAuMSwgcy4xLCBwZXJsPUZBTFNFLCB1c2VCeXRlcz1UUlVFKQpFbmNvZGluZyhtLmdyLnViLmV4W1s1TF1dKSA8LSAiVVRGLTgiCgojIyBOYW1lZCBjYXB0dXJlcwptLmJ5Lm5hbWUgPC0gZG8uY2FsbChjYmluZCwgcmVnbWF0Y2hlcyhzLjEsIGdyLnBlcmwpKQptLmJ5Lm5hbWUuMSA8LSBkby5jYWxsKGNiaW5kLCByZWdtYXRjaGVzKHMuMSwgcmVnZXhlYyhwLjFuLCBzLjEsIHBlcmw9VFJVRSkpKQoKc3RvcGlmbm90KAogICAgIyMgQ29tcGFyZSB0byA/Z3JlcCBleGFtcGxlIGZ1bmN0aW9uCiAgICBpZGVudGljYWwobS5nciwgZXhfZm4ocC4xLCBzLjEsIHBlcmw9RkFMU0UpKSwKICAgIGlkZW50aWNhbChtLmdyLnViLCBtLmdyLnViLmV4KSwKICAgIGlkZW50aWNhbChyZWdtYXRjaGVzKHMuMSwgZ3IucGVybCksIGV4X2ZuKHAuMW4sIHMuMSwgcGVybD1UUlVFKSksCiAgICBpZGVudGljYWwocmVnbWF0Y2hlcyhzLjEsIGdyLnBlcmwudWIpLAogICAgICAgICAgICAgIGV4X2ZuKHAuMW4sIHMuMSwgcGVybD1UUlVFLCB1c2VCeXRlcz1UUlVFKSksCiAgICAjIyBCeXRlIG1hdGNoaW5nIGluY3JlbWVudHMgZmFzdGVyLCBidXQgbWF0Y2hlcyB0aGUgc2FtZQogICAgYWxsKGdyLnViW1s1TF1dIC0gZ3JbWzVMXV0gPT0gYygwTCwgMEwsIDFMLCAxTCwgMUwsIDJMKSksCiAgICBpZGVudGljYWwobS5nciwgbS5nci51YiksCiAgICAjIyBQZXJsIGFuZCBub24tUGVybCBtYXRjaCB0aGUgc2FtZSAoaW4gdGhpcyBjYXNlKQogICAgaWRlbnRpY2FsKG0uZ3IsIHJlZ21hdGNoZXMocy4xLCBncmVnZXhlYyhwLjEsIHMuMSwgcGVybD1UUlVFKSkpLAogICAgIyMgQ2hlY2sgcGVybCBhY3R1YWxseSB1c2luZyBUUkUgKG5vIG5hbWVkIGNhcHR1cmUgc3VwcG9ydCkKICAgIGluaGVyaXRzKHRyeShncmVnZXhlYyhwLjFuLCBzLjEpLCBzaWxlbnQ9VFJVRSksICJ0cnktZXJyb3IiKSwKICAgICMjIE5hbWVkIGdyb3VwcyB3b3JrCiAgICBpZGVudGljYWwoZ3IucGVybFtbMV1dWyJiIixdLCBjKDhMLCAxMkwpKSwKICAgICMjIENvcm5lciBjYXNlcwogICAgaWRlbnRpY2FsKGdyZWdleGVjKHAuMSwgY2hhcmFjdGVyKCkpLCBsaXN0KCkpLAogICAgaWRlbnRpY2FsKGdyZWdleGVjKHAuMW4sIGNoYXJhY3RlcigpLCBwZXJsPVRSVUUpLCBsaXN0KCkpLAogICAgaWRlbnRpY2FsKGdyZWdleGVjKHAuMSwgTlVMTCksIGxpc3QoKSksCiAgICBpZGVudGljYWwoZ3JlZ2V4ZWMocC4xbiwgTlVMTCwgcGVybD1UUlVFKSwgbGlzdCgpKSwKICAgICMjIE5hbWVkIGNhcHR1cmUgY2Fycnkgb3ZlciB0byBtYXRjaGVzCiAgICBpZGVudGljYWwobS5ieS5uYW1lWyJhIixdLCBjKCJBIiwgIkJDIiwgIkRFIiwgIkhcdTAwZTkiLCAiV1x1MDBkNiIpKSwKICAgIGlkZW50aWNhbChtLmJ5Lm5hbWVbImIiLF0sIGMoIjEiLCAiMjMiLCAiMzUiLCAiMzIwIiwgIjQxIikpLAogICAgaWRlbnRpY2FsKG0uYnkubmFtZS4xWyJhIixdLCBjKCJBIiwgIkRFIiwgIkhcdTAwZTkiKSksCiAgICBpZGVudGljYWwobS5ieS5uYW1lLjFbImIiLF0sIGMoIjEiLCAiMzUiLCAiMzIwIikpCikKCiMjIEludmVydCBhbmQgYHJlZ21hdGNoZXM8LWAgZG8gbm90IHdvcmsgd2l0aCBvdmVybGFwcGluZyBjYXB0dXJlcywKIyMgYnV0IHNob3VsZCB3b3JrIGlmIHdlIGRyb3AgdGhlIGZ1bGwgbWF0Y2ggZnJvbSBvdXIgZGF0YS4KZHJvcF9maXJzdF9jYXB0IDwtIGZ1bmN0aW9uKHgpIHsKICAgIG1sIDwtIGF0dHIoeCwgJ21hdGNoLmxlbmd0aCcpWy0xTCxdCiAgICB4IDwtIHhbLTFMLF0KICAgIGF0dHIoeCwgJ21hdGNoLmxlbmd0aCcpIDwtIG1sCiAgICB4Cn0KCiMjIFJlcGxhY2Ugd2l0aCBsb3dlciBjYXNlIGFuZCBtdWx0aXBseSBudW1zIGJ5IDEwMApzLjIgPC0gcy4yYSA8LSBzLjFbYygxTCw1TCldCmdyLjIgPC0gbGFwcGx5KGdyZWdleGVjKHAuMSwgcy4yKSwgZHJvcF9maXJzdF9jYXB0KQptLmdyLjIgPC0gcmVnbWF0Y2hlcyhzLjIsIGdyLjIpCnJlcGxhY2VtZW50IDwtIGxhcHBseShtLmdyLjIsIHRvbG93ZXIpCnJlcGxhY2VtZW50W1sxXV1bMixdIDwtIGFzLm51bWVyaWMocmVwbGFjZW1lbnRbWzFdXVsyLF0pICogMTAwCnJlcGxhY2VtZW50W1syXV1bMixdIDwtIGFzLm51bWVyaWMocmVwbGFjZW1lbnRbWzJdXVsyLF0pICogMTAwCnMuMmEgPC0gcy4yCnJlZ21hdGNoZXMocy4yYSwgZ3IuMikgPC0gcmVwbGFjZW1lbnQKCiMjIFJlcGxhY2Ugd2l0aCBgaW52ZXJ0PVRSVUVgCnMuMmIgPC0gcy4yCnJlZ21hdGNoZXMocy4yYiwgZ3IuMiwgaW52ZXJ0PVRSVUUpIDwtIAogICAgcmVwbGljYXRlKDJMLCBjKCJ+IiwgIiMiLCAifiIsICJAIiwgIn4iKSwgc2ltcGxpZnk9RkFMU0UpCgpzdG9waWZub3QoCiAgICBpZGVudGljYWwocmVnbWF0Y2hlcyhzLjIsIGdyLjIsIGludmVydD1UUlVFKSwgCiAgICAgICAgICAgICAgbGlzdChjKCJUZXN0OiAiLCAiIiwgIi0iLCAiIiwgIiBib28iKSwgYygiIiwgIiIsICIrIiwgIiIsICIiKSkpLAogICAgaWRlbnRpY2FsKHMuMmEsIGMoIlRlc3Q6IGExMDAtYmMyMzAwIGJvbyIsICJoXHUwMGU5MzIwMDArd1x1MDBmNjQxMDAiKSksCiAgICBpZGVudGljYWwocy4yYiwgYygifkEjMX5CQ0AyM34iLCAifkhcdTAwZTkjMzIwfldcdTAwZDZANDF+IikpKQoKIyMgQ2hlY2sgdGhhdCB0aGUgcGVybCBzd2l0Y2ggaXMgd29ya2luZyBmdWxseSAoaC90IE1pY2hhZWwgQ2hpcmljbykKcGF0IDwtICIoPzxmaXJzdD5cXGQrKSIKZ3JlZ2V4ZWMocGF0LCAiMTIzIDQ1NiIsIHBlcmw9VFJVRSkKIyMgVFJFIGRvZXMgbm90IHN1cHBvcnQgbmFtZSBjYXB0cwpzdG9waWZub3QoaW5oZXJpdHModHJ5KGdyZWdleGVjKHBhdCwgIjEyMyA0NTYiLCBwZXJsPUZBTFNFKSksICJ0cnktZXJyb3IiKSkKbG9jYWwoewogICAgb2xkLndhcm4gPC0gb3B0aW9ucyh3YXJuID0gMikKICAgIG9uLmV4aXQob3B0aW9ucyhvbGQud2FybikpCiAgICBncmVnZXhlYygiMTIzIiwgIjEyMyA0NTYiLCBmaXhlZD1UUlVFKSAjIE5vIHdhcm5pbmcgd2l0aCBwZXJsPUZBTFNFCn0pCgojIyBUcmFuc2xhdGlvbnMgdG8gd2NoYXJfdCBhcmUgZG9uZSBjb3JyZWN0bHk/ICBOb3RlOiB0aGlzIGlzIHRlc3RpbmcKIyMgdW5kb2N1bWVudGVkIGJlaGF2aW9yIGluIGBzdWJgIGFuZCBvdGhlcnMgd2hlcmVieSBzdHJpbmdzIGFyZSB0cmFuc2xhdGVkCiMjIHdpdGggc3Vic3RpdHV0aW9uIG9mIGludmFsaWQgYnl0ZXMgaW50byB0aGVpciBlc2NhcGVkIHZhbHVlcywgcmF0aGVyIHRoYW4KIyMgZmFpbGluZy4gIFRoaXMgYmVoYXZpb3IgbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmUsIGJ1dCBpbiB0aGUgaW50ZXJpbSB3ZQojIyBtdXN0IHN0aWxsIGVuc3VyZSBpdCBpcyBkb25lIGNvcnJlY3RseS4gIEN1cnJlbnRseSAiXHhhMCIgaXMgdHJhbnNsYXRlZCBpbnRvCiMjICI8YTA+IiBpbiBVVEYtOCBzdHJpbmdzLgp0ZXh0IDwtIGMoIlx4YTA8YTA+IiwgIjxhMD5ceGEwXHhmZjxhMD5ceGJiPiIsICJceGMwIikKRW5jb2RpbmcodGV4dCkgPC0gIlVURi04Igpnc3ViLnJlcyA8LSBjKCIhYTA+IWEwPiIsICIhYTA+IWEwPiFmZj4hYTA+IWJiPj4iLCAiIWMwPiIpCmdyZXAucmVzIDwtIGMoVFJVRSwgVFJVRSwgVFJVRSkKc3BsaXQucmVzIDwtIGxpc3QoYygiIiwgImEwPiIsICJhMD4iKSwKICAgICAgICAgICAgICAgICAgYygiIiwgImEwPiIsICJhMD4iLCAiZmY+IiwgImEwPiIsICJiYj4+IiksCiAgICAgICAgICAgICAgICAgIGMoIiIsICJjMD4iKSkKc3RvcGlmbm90KGlkZW50aWNhbChnc3ViKCI8IiwgIiEiLCB0ZXh0KSwgZ3N1Yi5yZXMpLAogICAgICAgICAgaWRlbnRpY2FsKGdyZXBsKCI8IiwgdGV4dCksIGdyZXAucmVzKSwKICAgICAgICAgIGlkZW50aWNhbChzdHJzcGxpdCh0ZXh0LCAiPCIpLCBzcGxpdC5yZXMpKQoK