Files
sam-hotfix/e2e/runner/b64_1.txt
김보곤 6d320b396d test: E2E 전체 테스트 66/75 (88.0%) 통과 - 시나리오 리라이트 후 재실행
- 실패 시나리오 11개 리라이트 + 중복 2개 삭제 (fill_form → READ-only 패턴)
- 이전 78.7% → 88.0% 개선 (+9.3%p)
- 실패 9건 중 7건은 사이드바 렌더링 인프라 이슈
- 실질 기능 성공률 97.1% (66/68)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 22:01:54 +09:00

1 line
18 KiB
Plaintext

BzbGVlcCg1MDApOyByZXR1cm4gcGFzcygnQ2xpY2tlZCBmaXJzdCByb3cnKTsgfSwgYXN5bmMgY2xpY2tfYnV0dG9uKGFjdGlvbiwgY3R4KSB7IGNvbnN0IHRleHQgPSBhY3Rpb24udmFsdWUgfHwgYWN0aW9uLnRhcmdldDsgY29uc3QgYnRucyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uLCBbcm9sZT0iYnV0dG9uIl0nKSk7IGNvbnN0IGJ0biA9IGJ0bnMuZmluZCgoYikgPT4gYi5pbm5lclRleHQ/LnRyaW0oKS5pbmNsdWRlcyh0ZXh0KSk7IGlmICghYnRuKSByZXR1cm4gZmFpbChgQnV0dG9uICIke3RleHR9IiBub3QgZm91bmRgKTsgc2Nyb2xsSW50b1ZpZXcoYnRuKTsgdHJpZ2dlckNsaWNrKGJ0bik7IGF3YWl0IHNsZWVwKDMwMCk7IHJldHVybiBwYXNzKGBDbGlja2VkIGJ1dHRvbjogJHt0ZXh0fWApOyB9LCBhc3luYyBjbGlja19kaWFsb2dfY29uZmlybShhY3Rpb24sIGN0eCkgeyBhd2FpdCBzbGVlcCgzMDApOyBjb25zdCBkaWFsb2cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbcm9sZT0iYWxlcnRkaWFsb2ciXScpIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJkaWFsb2ciXScpOyBpZiAoIWRpYWxvZykgcmV0dXJuIGZhaWwoJ05vIGRpYWxvZyBmb3VuZCcpOyBjb25zdCBjb25maXJtVGV4dHMgPSBbJ+2ZleyduCcsICfsmIgnLCAn7IKt7KCcJywgJ09LJywgJ1llcycsICdDb25maXJtJ107IGNvbnN0IGJ0bnMgPSBBcnJheS5mcm9tKGRpYWxvZy5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKSk7IGNvbnN0IGJ0biA9IGJ0bnMuZmluZCgoYikgPT4gY29uZmlybVRleHRzLnNvbWUoKHQpID0+IGIuaW5uZXJUZXh0Py50cmltKCkuaW5jbHVkZXModCkpICk7IGlmICghYnRuKSByZXR1cm4gZmFpbCgnQ29uZmlybSBidXR0b24gbm90IGZvdW5kIGluIGRpYWxvZycpOyB0cmlnZ2VyQ2xpY2soYnRuKTsgYXdhaXQgc2xlZXAoNTAwKTsgcmV0dXJuIHBhc3MoJ0NvbmZpcm1lZCBkaWFsb2cnKTsgfSwgYXN5bmMgZmlsbChhY3Rpb24sIGN0eCkgeyBsZXQgZWwgPSBmaW5kRWwoYWN0aW9uLnRhcmdldCwgeyBzZWxlY3RvcnM6IGN0eC5zZWxlY3RvcnMgfSk7IGlmICghZWwpIHJldHVybiBmYWlsKGBJbnB1dCBub3QgZm91bmQ6ICR7YWN0aW9uLnRhcmdldH1gKTsgc2Nyb2xsSW50b1ZpZXcoZWwpOyBlbC5mb2N1cygpOyBpZiAoYWN0aW9uLmNsZWFyICE9PSBmYWxzZSkgY2xlYXJJbnB1dChlbCk7IGxldCB2YWx1ZSA9IGFjdGlvbi52YWx1ZSA/PyAnJzsgdmFsdWUgPSByZXBsYWNlVmFycyh2YWx1ZSwgY3R4LnZhcmlhYmxlcyk7IHNldElucHV0VmFsdWUoZWwsIHZhbHVlKTsgYXdhaXQgc2xlZXAoMjAwKTsgcmV0dXJuIHBhc3MoYEZpbGxlZCAiJHthY3Rpb24udGFyZ2V0fSIgd2l0aCAiJHt2YWx1ZS5zdWJzdHJpbmcoMCwgMzApfSJgKTsgfSwgYXN5bmMgZmlsbF9udGgoYWN0aW9uLCBjdHgpIHsgY29uc3QgbiA9IGFjdGlvbi5udGggPz8gMDsgY29uc3QgZWwgPSBmaW5kRWwoYWN0aW9uLnRhcmdldCwgeyBudGg6IG4sIHNlbGVjdG9yczogY3R4LnNlbGVjdG9ycyB9KTsgaWYgKCFlbCkgcmV0dXJuIGZhaWwoYElucHV0WyR7bn1dIG5vdCBmb3VuZDogJHthY3Rpb24udGFyZ2V0fWApOyBlbC5mb2N1cygpOyBjbGVhcklucHV0KGVsKTsgY29uc3QgdmFsdWUgPSByZXBsYWNlVmFycyhhY3Rpb24udmFsdWUgPz8gJycsIGN0eC52YXJpYWJsZXMpOyBzZXRJbnB1dFZhbHVlKGVsLCB2YWx1ZSk7IGF3YWl0IHNsZWVwKDIwMCk7IHJldHVybiBwYXNzKGBGaWxsZWQgWyR7bn1dIHdpdGggIiR7dmFsdWUuc3Vic3RyaW5nKDAsIDMwKX0iYCk7IH0sIGFzeW5jIGZpbGxfZm9ybShhY3Rpb24sIGN0eCkgeyBjb25zdCBmaWVsZHMgPSBhY3Rpb24uZmllbGRzIHx8IFtdOyBjb25zdCByZXN1bHRzID0gW107IGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7IGNvbnN0IGxhYmVsID0gZmllbGQubmFtZSB8fCBmaWVsZC5sYWJlbDsgbGV0IHZhbHVlID0gcmVwbGFjZVZhcnMoZmllbGQudmFsdWUgPz8gJycsIGN0eC52YXJpYWJsZXMpOyBsZXQgZWwgPSBudWxsOyBjb25zdCBsYWJlbHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xhYmVsJykpOyBjb25zdCBtYXRjaExhYmVsID0gbGFiZWxzLmZpbmQoKGwpID0+IGwudGV4dENvbnRlbnQ/LmluY2x1ZGVzKGxhYmVsKSk7IGlmIChtYXRjaExhYmVsKSB7IGNvbnN0IGZvcklkID0gbWF0Y2hMYWJlbC5nZXRBdHRyaWJ1dGUoJ2ZvcicpOyBpZiAoZm9ySWQpIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ySWQpOyBpZiAoIWVsKSBlbCA9IG1hdGNoTGFiZWwucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnKTsgaWYgKCFlbCkgZWwgPSBtYXRjaExhYmVsLnBhcmVudEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0Jyk7IH0gaWYgKCFlbCkgeyBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIGBpbnB1dFtwbGFjZWhvbGRlcio9IiR7bGFiZWx9Il0sIHRleHRhcmVhW3BsYWNlaG9sZGVyKj0iJHtsYWJlbH0iXWAgKTsgfSBpZiAoIWVsKSB7IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbbmFtZSo9IiR7bGFiZWx9Il0sIHRleHRhcmVhW25hbWUqPSIke2xhYmVsfSJdYCk7IH0gaWYgKCFlbCkgeyByZXN1bHRzLnB1c2goeyBmaWVsZDogbGFiZWwsIHN0YXR1czogJ3NraXAnLCBkZXRhaWw6ICdub3QgZm91bmQnIH0pOyBjb250aW51ZTsgfSBpZiAoZmllbGQudHlwZSA9PT0gJ3NlbGVjdCcgfHwgZWwudGFnTmFtZSA9PT0gJ1NFTEVDVCcpIHsgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmZyb20oZWwucXVlcnlTZWxlY3RvckFsbCgnb3B0aW9uJykpOyBjb25zdCBvcHQgPSBvcHRpb25zLmZpbmQoKG8pID0+IG8udGV4dENvbnRlbnQ/LmluY2x1ZGVzKHZhbHVlKSk7IGlmIChvcHQpIHsgZWwudmFsdWUgPSBvcHQudmFsdWU7IGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpOyB9IH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2RhdGUnKSB7IHNldElucHV0VmFsdWUoZWwsIHZhbHVlKTsgfSBlbHNlIHsgY2xlYXJJbnB1dChlbCk7IHNldElucHV0VmFsdWUoZWwsIHZhbHVlKTsgfSByZXN1bHRzLnB1c2goeyBmaWVsZDogbGFiZWwsIHN0YXR1czogJ29rJyB9KTsgYXdhaXQgc2xlZXAoMTUwKTsgfSBjb25zdCBmaWxsZWQgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5zdGF0dXMgPT09ICdvaycpLmxlbmd0aDsgY29uc3Qgc2tpcHBlZCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiByLnN0YXR1cyA9PT0gJ3NraXAnKS5sZW5ndGg7IGlmIChmaWxsZWQgPT09IDApIHJldHVybiBmYWlsKGBmaWxsX2Zvcm06IG5vIGZpZWxkcyBmaWxsZWQgKCR7c2tpcHBlZH0gbm90IGZvdW5kKWApOyByZXR1cm4gcGFzcyhgZmlsbF9mb3JtOiAke2ZpbGxlZH0vJHtmaWVsZHMubGVuZ3RofSBmaWxsZWRgKTsgfSwgYXN5bmMgZmlsbF9hbmRfd2FpdChhY3Rpb24sIGN0eCkgeyBjb25zdCByZXN1bHQgPSBhd2FpdCBBY3Rpb25IYW5kbGVycy5maWxsKGFjdGlvbiwgY3R4KTsgYXdhaXQgc2xlZXAoMTAwMCk7IHJldHVybiByZXN1bHQ7IH0sIGFzeW5jIGNsZWFyKGFjdGlvbiwgY3R4KSB7IGNvbnN0IGVsID0gZmluZEVsKGFjdGlvbi50YXJnZXQsIHsgc2VsZWN0b3JzOiBjdHguc2VsZWN0b3JzIH0pOyBpZiAoIWVsKSByZXR1cm4gZmFpbChgSW5wdXQgbm90IGZvdW5kOiAke2FjdGlvbi50YXJnZXR9YCk7IGNsZWFySW5wdXQoZWwpOyBhd2FpdCBzbGVlcCgyMDApOyByZXR1cm4gcGFzcyhgQ2xlYXJlZDogJHthY3Rpb24udGFyZ2V0fWApOyB9LCBhc3luYyBlZGl0X2ZpZWxkKGFjdGlvbiwgY3R4KSB7IHJldHVybiBBY3Rpb25IYW5kbGVycy5maWxsKGFjdGlvbiwgY3R4KTsgfSwgYXN5bmMgc2VsZWN0KGFjdGlvbiwgY3R4KSB7IGNvbnN0IGVsID0gZmluZEVsKGFjdGlvbi50YXJnZXQsIHsgc2VsZWN0b3JzOiBjdHguc2VsZWN0b3JzIH0pOyBpZiAoIWVsKSByZXR1cm4gZmFpbChgU2VsZWN0IG5vdCBmb3VuZDogJHthY3Rpb24udGFyZ2V0fWApOyBpZiAoZWwudGFnTmFtZSA9PT0gJ1NFTEVDVCcpIHsgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmZyb20oZWwucXVlcnlTZWxlY3RvckFsbCgnb3B0aW9uJykpOyBjb25zdCBvcHQgPSBvcHRpb25zLmZpbmQoKG8pID0+IG8udGV4dENvbnRlbnQ/LmluY2x1ZGVzKGFjdGlvbi52YWx1ZSkpOyBpZiAob3B0KSB7IGVsLnZhbHVlID0gb3B0LnZhbHVlOyBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTsgcmV0dXJuIHBhc3MoYFNlbGVjdGVkOiAke2FjdGlvbi52YWx1ZX1gKTsgfSByZXR1cm4gZmFpbChgT3B0aW9uICIke2FjdGlvbi52YWx1ZX0iIG5vdCBmb3VuZGApOyB9IHJldHVybiBBY3Rpb25IYW5kbGVycy5zZWxlY3RfZHJvcGRvd24oYWN0aW9uLCBjdHgpOyB9LCBhc3luYyBzZWxlY3RfZHJvcGRvd24oYWN0aW9uLCBjdHgpIHsgY29uc3QgdHJpZ2dlciA9IGZpbmRFbChhY3Rpb24udGFyZ2V0LCB7IHNlbGVjdG9yczogY3R4LnNlbGVjdG9ycyB9KTsgaWYgKCF0cmlnZ2VyKSByZXR1cm4gZmFpbChgRHJvcGRvd24gdHJpZ2dlciBub3QgZm91bmQ6ICR7YWN0aW9uLnRhcmdldH1gKTsgdHJpZ2dlckNsaWNrKHRyaWdnZXIpOyBhd2FpdCBzbGVlcCg1MDApOyBjb25zdCBvcHRpb25TZWxlY3RvcnMgPSBbICdbcm9sZT0ib3B0aW9uIl0nLCAnW3JvbGU9Imxpc3Rib3giXSBsaScsICdbY2xhc3MqPSJvcHRpb24iXScsICdbY2xhc3MqPSJtZW51LWl0ZW0iXScsICdbY2xhc3MqPSJkcm9wZG93bi1pdGVtIl0nLCAnbGknLCBdOyBmb3IgKGNvbnN0IHNlbCBvZiBvcHRpb25TZWxlY3RvcnMpIHsgY29uc3Qgb3B0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsKTsgY29uc3Qgb3B0ID0gQXJyYXkuZnJvbShvcHRpb25zKS5maW5kKChvKSA9PiBvLnRleHRDb250ZW50Py50cmltKCkuaW5jbHVkZXMoYWN0aW9uLnZhbHVlKSk7IGlmIChvcHQpIHsgdHJpZ2dlckNsaWNrKG9wdCk7IGF3YWl0IHNsZWVwKDMwMCk7IHJldHVybiBwYXNzKGBTZWxlY3RlZCBkcm9wZG93bjogJHthY3Rpb24udmFsdWV9YCk7IH0gfSByZXR1cm4gZmFpbChgRHJvcGRvd24gb3B0aW9uICIke2FjdGlvbi52YWx1ZX0iIG5vdCBmb3VuZGApOyB9LCBhc3luYyBzZWxlY3RfZmlsdGVyKGFjdGlvbiwgY3R4KSB7IHJldHVybiBBY3Rpb25IYW5kbGVycy5zZWxlY3RfZHJvcGRvd24oYWN0aW9uLCBjdHgpOyB9LCBhc3luYyBjaGVjayhhY3Rpb24sIGN0eCkgeyBjb25zdCBlbCA9IGZpbmRFbChhY3Rpb24udGFyZ2V0LCB7IHNlbGVjdG9yczogY3R4LnNlbGVjdG9ycyB9KTsgaWYgKCFlbCkgcmV0dXJuIGZhaWwoYENoZWNrYm94IG5vdCBmb3VuZDogJHthY3Rpb24udGFyZ2V0fWApOyBpZiAoIWVsLmNoZWNrZWQpIHsgdHJpZ2dlckNsaWNrKGVsKTsgYXdhaXQgc2xlZXAoMjAwKTsgfSByZXR1cm4gcGFzcyhgQ2hlY2tlZDogJHthY3Rpb24udGFyZ2V0fWApOyB9LCBhc3luYyB1bmNoZWNrKGFjdGlvbiwgY3R4KSB7IGNvbnN0IGVsID0gZmluZEVsKGFjdGlvbi50YXJnZXQsIHsgc2VsZWN0b3JzOiBjdHguc2VsZWN0b3JzIH0pOyBpZiAoIWVsKSByZXR1cm4gZmFpbChgQ2hlY2tib3ggbm90IGZvdW5kOiAke2FjdGlvbi50YXJnZXR9YCk7IGlmIChlbC5jaGVja2VkKSB7IHRyaWdnZXJDbGljayhlbCk7IGF3YWl0IHNsZWVwKDIwMCk7IH0gcmV0dXJuIHBhc3MoYFVuY2hlY2tlZDogJHthY3Rpb24udGFyZ2V0fWApOyB9LCBhc3luYyBjaGVja19udGgoYWN0aW9uLCBjdHgpIHsgY29uc3QgbiA9IGFjdGlvbi5udGggPz8gMDsgY29uc3QgZWwgPSBmaW5kRWwoYWN0aW9uLnRhcmdldCwgeyBudGg6IG4sIHNlbGVjdG9yczogY3R4LnNlbGVjdG9ycyB9KTsgaWYgKCFlbCkgcmV0dXJuIGZhaWwoYENoZWNrYm94WyR7bn1dIG5vdCBmb3VuZDogJHthY3Rpb24udGFyZ2V0fWApOyBpZiAoIWVsLmNoZWNrZWQpIHsgdHJpZ2dlckNsaWNrKGVsKTsgYXdhaXQgc2xlZXAoMjAwKTsgfSByZXR1cm4gcGFzcyhgQ2hlY2tlZCBbJHtufV06ICR7YWN0aW9uLnRhcmdldH1gKTsgfSwgYXN5bmMgdW5jaGVja19udGgoYWN0aW9uLCBjdHgpIHsgY29uc3QgbiA9IGFjdGlvbi5udGggPz8gMDsgY29uc3QgZWwgPSBmaW5kRWwoYWN0aW9uLnRhcmdldCwgeyBudGg6IG4sIHNlbGVjdG9yczogY3R4LnNlbGVjdG9ycyB9KTsgaWYgKCFlbCkgcmV0dXJuIGZhaWwoYENoZWNrYm94WyR7bn1dIG5vdCBmb3VuZDogJHthY3Rpb24udGFyZ2V0fWApOyBpZiAoZWwuY2hlY2tlZCkgeyB0cmlnZ2VyQ2xpY2soZWwpOyBhd2FpdCBzbGVlcCgyMDApOyB9IHJldHVybiBwYXNzKGBVbmNoZWNrZWQgWyR7bn1dOiAke2FjdGlvbi50YXJnZXR9YCk7IH0sIGFzeW5jIHdhaXQoYWN0aW9uLCBjdHgpIHsgY29uc3QgbXMgPSBhY3Rpb24uZHVyYXRpb24gfHwgYWN0aW9uLnRpbWVvdXQgfHwgMTAwMDsgYXdhaXQgc2xlZXAobXMpOyByZXR1cm4gcGFzcyhgV2FpdGVkICR7bXN9bXNgKTsgfSwgYXN5bmMgd2FpdF9mb3JfZWxlbWVudChhY3Rpb24sIGN0eCkgeyBjb25zdCB0aW1lb3V0ID0gYWN0aW9uLnRpbWVvdXQgfHwgMTAwMDA7IGNvbnN0IHQwID0gbm93KCk7IHdoaWxlIChub3coKSAtIHQwIDwgdGltZW91dCkgeyBjb25zdCBlbCA9IGZpbmRFbChhY3Rpb24udGFyZ2V0LCB7IHNlbGVjdG9yczogY3R4LnNlbGVjdG9ycyB9KTsgaWYgKGVsKSByZXR1cm4gcGFzcyhgRm91bmQ6ICR7YWN0aW9uLnRhcmdldH1gKTsgYXdhaXQgc2xlZXAoMjAwKTsgfSByZXR1cm4gZmFpbChgVGltZW91dCB3YWl0aW5nIGZvcjogJHthY3Rpb24udGFyZ2V0fWApOyB9LCBhc3luYyB3YWl0X2Zvcl90YWJsZShhY3Rpb24sIGN0eCkgeyBjb25zdCB0aW1lb3V0ID0gYWN0aW9uLnRpbWVvdXQgfHwgMTAwMDA7IGNvbnN0IHQwID0gbm93KCk7IHdoaWxlIChub3coKSAtIHQwIDwgdGltZW91dCkgeyBjb25zdCByb3dzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgndGFibGUgdGJvZHkgdHInKTsgaWYgKHJvd3MubGVuZ3RoID4gMCkgcmV0dXJuIHBhc3MoYFRhYmxlIGxvYWRlZDogJHtyb3dzLmxlbmd0aH0gcm93c2ApOyBhd2FpdCBzbGVlcCgzMDApOyB9IHJldHVybiBmYWlsKCdUaW1lb3V0IHdhaXRpbmcgZm9yIHRhYmxlIGRhdGEnKTsgfSwgYXN5bmMgd2FpdF9mb3JfbW9kYWwoYWN0aW9uLCBjdHgpIHsgY29uc3QgdGltZW91dCA9IGFjdGlvbi50aW1lb3V0IHx8IDUwMDA7IGNvbnN0IHQwID0gbm93KCk7IHdoaWxlIChub3coKSAtIHQwIDwgdGltZW91dCkgeyBpZiAoTW9kYWxHdWFyZC5jaGVjaygpLm9wZW4pIHJldHVybiBwYXNzKCdNb2RhbCBhcHBlYXJlZCcpOyBhd2FpdCBzbGVlcCgyMDApOyB9IHJldHVybiBmYWlsKCdUaW1lb3V0IHdhaXRpbmcgZm9yIG1vZGFsJyk7IH0sIGFzeW5jIHdhaXRfZm9yX25hdmlnYXRpb24oYWN0aW9uLCBjdHgpIHsgYXdhaXQgc2xlZXAoMjAwMCk7IGNvbnN0IHYgPSBhY3Rpb24uZXhwZWN0ZWQgfHwgYWN0aW9uLnZlcmlmaWNhdGlvbjsgaWYgKHYpIHsgY29uc3QgdXJsQ2hlY2sgPSB2LnVybF9jb250YWlucyB8fCB2LnVybDsgaWYgKHVybENoZWNrICYmICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcyh1cmxDaGVjaykpIHsgcmV0dXJuIHdhcm4oYFVSTCBkb2Vzbid0IGNvbnRhaW4gIiR7dXJsQ2hlY2t9IjogJHt3aW5kb3cubG9jYXRpb24uaHJlZn1gKTsgfSBpZiAodi52aXNpYmxlKSB7IGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LmlubmVyVGV4dDsgY29uc3QgbWlzc2luZyA9IHYudmlzaWJsZS5maWx0ZXIoKHQpID0+ICF0ZXh0LmluY2x1ZGVzKHQpKTsgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkgeyByZXR1cm4gd2FybihgTWlzc2luZyB2aXNpYmxlIHRleHQ6ICR7bWlzc2luZy5qb2luKCcsICcpfWApOyB9IH0gfSByZXR1cm4gcGFzcyhgTmF2aWdhdGlvbiBvazogJHt3aW5kb3cubG9jYXRpb24uaHJlZn1gKTsgfSwgYXN5bmMgdmVyaWZ5X2VsZW1lbnQoYWN0aW9uLCBjdHgpIHsgY29uc3QgdiA9IGFjdGlvbi52ZXJpZmljYXRpb24gfHwgYWN0aW9uLnZlcmlmeSB8fCBhY3Rpb24uZXhwZWN0ZWQgfHwge307IGNvbnN0IHRhcmdldCA9IGFjdGlvbi50YXJnZXQ7IGlmICghdGFyZ2V0KSB7IHJldHVybiBBY3Rpb25IYW5kbGVycy52ZXJpZnlfY2hlY2tzKGFjdGlvbiwgY3R4KTsgfSBjb25zdCBlbCA9IGZpbmRFbCh0YXJnZXQsIHsgc2VsZWN0b3JzOiBjdHguc2VsZWN0b3JzIH0pOyBpZiAodi5leGlzdHMgPT09IGZhbHNlKSB7IHJldHVybiBlbCA/IGZhaWwoYEVsZW1lbnQgc2hvdWxkIE5PVCBleGlzdDogJHt0YXJnZXR9YCkgOiBwYXNzKGBDb25maXJtZWQgYWJzZW50OiAke3RhcmdldH1gKTsgfSBpZiAodi5jb3VudCAhPSBudWxsKSB7IGNvbnN0IGFsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGFyZ2V0KTsgcmV0dXJuIGFsbC5sZW5ndGggPj0gdi5jb3VudCA/IHBhc3MoYENvdW50ICR7YWxsLmxlbmd0aH0gPj0gJHt2LmNvdW50fTogJHt0YXJnZXR9YCkgOiB3YXJuKGBDb3VudCAke2FsbC5sZW5ndGh9IDwgJHt2LmNvdW50fTogJHt0YXJnZXR9YCk7IH0gaWYgKGVsKSByZXR1cm4gcGFzcyhgRWxlbWVudCBleGlzdHM6ICR7dGFyZ2V0fWApOyByZXR1cm4gd2FybihgRWxlbWVudCBub3QgZm91bmQ6ICR7dGFyZ2V0fWApOyB9LCBhc3luYyB2ZXJpZnlfY2hlY2tzKGFjdGlvbiwgY3R4KSB7IGNvbnN0IGNoZWNrcyA9IGFjdGlvbi5jaGVja3MgfHwgW107IGlmIChjaGVja3MubGVuZ3RoID09PSAwKSByZXR1cm4gcGFzcygnTm8gY2hlY2tzIGRlZmluZWQnKTsgY29uc3QgdGV4dCA9IGRvY3VtZW50LmJvZHkuaW5uZXJUZXh0OyBsZXQgcGFzc2VkID0gMDsgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja3MpIHsgY29uc3QgdGVybXMgPSBjaGVjay5tYXRjaCgvWycnXShbXicnXSspWycnXXxb6rCALe2eo1x3XSsvZykgfHwgW107IGlmICh0ZXJtcy5zb21lKCh0KSA9PiB0ZXh0LmluY2x1ZGVzKHQucmVwbGFjZSgvWycnXS9nLCAnJykpKSkgcGFzc2VkKys7IH0gcmV0dXJuIHBhc3NlZCA+IDAgPyBwYXNzKGBDaGVja3M6ICR7cGFzc2VkfS8ke2NoZWNrcy5sZW5ndGh9IHZlcmlmaWVkYCkgOiB3YXJuKGBDaGVja3M6IDAvJHtjaGVja3MubGVuZ3RofSB2ZXJpZmllZGApOyB9LCBhc3luYyB2ZXJpZnlfdGV4dChhY3Rpb24sIGN0eCkgeyBjb25zdCB2ID0gYWN0aW9uLnZlcmlmaWNhdGlvbiB8fCB7fTsgY29uc3QgdGV4dCA9IHYudGV4dCB8fCB2LnRleHRfcGF0dGVybjsgaWYgKCF0ZXh0KSByZXR1cm4gcGFzcygnTm8gdGV4dCB0byB2ZXJpZnknKTsgY29uc3QgcGFnZVRleHQgPSBkb2N1bWVudC5ib2R5LmlubmVyVGV4dDsgaWYgKHYudGV4dF9wYXR0ZXJuKSB7IGNvbnN0IHJlID0gbmV3IFJlZ0V4cCh2LnRleHRfcGF0dGVybik7IHJldHVybiByZS50ZXN0KHBhZ2VUZXh0KSA/IHBhc3MoYFRleHQgcGF0dGVybiBmb3VuZDogJHt2LnRleHRfcGF0dGVybn1gKSA6IGZhaWwoYFRleHQgcGF0dGVybiBOT1QgZm91bmQ6ICR7di50ZXh0X3BhdHRlcm59YCk7IH0gY29uc3QgZXhpc3RzID0gdi5leGlzdHMgIT09IGZhbHNlOyBjb25zdCBmb3VuZCA9IHBhZ2VUZXh0LmluY2x1ZGVzKHRleHQpOyBpZiAoZXhpc3RzICYmIGZvdW5kKSByZXR1cm4gcGFzcyhgVGV4dCBmb3VuZDogIiR7dGV4dC5zdWJzdHJpbmcoMCwgNDApfSJgKTsgaWYgKGV4aXN0cyAmJiAhZm91bmQpIHJldHVybiBmYWlsKGBUZXh0IE5PVCBmb3VuZDogIiR7dGV4dC5zdWJzdHJpbmcoMCwgNDApfSJgKTsgaWYgKCFleGlzdHMgJiYgIWZvdW5kKSByZXR1cm4gcGFzcyhgVGV4dCBjb3JyZWN0bHkgYWJzZW50OiAiJHt0ZXh0LnN1YnN0cmluZygwLCA0MCl9ImApOyBpZiAoIWV4aXN0cyAmJiBmb3VuZCkgcmV0dXJuIGZhaWwoYFRleHQgc2hvdWxkIGJlIGFic2VudDogIiR7dGV4dC5zdWJzdHJpbmcoMCwgNDApfSJgKTsgcmV0dXJuIHBhc3MoJ3ZlcmlmeV90ZXh0Jyk7IH0sIGFzeW5jIHZlcmlmeV91cmwoYWN0aW9uLCBjdHgpIHsgY29uc3QgdiA9IGFjdGlvbi52ZXJpZmljYXRpb24gfHwgYWN0aW9uLmV4cGVjdGVkIHx8IHt9OyBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsgaWYgKHYudXJsX2NvbnRhaW5zKSB7IGlmICghdXJsLmluY2x1ZGVzKHYudXJsX2NvbnRhaW5zKSkgcmV0dXJuIGZhaWwoYFVSTCBtaXNzaW5nOiAke3YudXJsX2NvbnRhaW5zfWApOyB9IGlmICh2LnVybCkgeyBpZiAoIXVybC5pbmNsdWRlcyh2LnVybCkpIHJldHVybiBmYWlsKGBVUkwgbWlzc2luZzogJHt2LnVybH1gKTsgfSBpZiAodi51cmxfcGF0dGVybikgeyBjb25zdCByZSA9IG5ldyBSZWdFeHAodi51cmxfcGF0dGVybik7IGlmICghcmUudGVzdCh1cmwpKSByZXR1cm4gZmFpbChgVVJMIHBhdHRlcm4gbWlzbWF0Y2g6ICR7di51cmxfcGF0dGVybn1gKTsgfSBpZiAodi52aXNpYmxlKSB7IGNvbnN0IHRleHQgPSBkb2N1bWVudC5ib2R5LmlubmVyVGV4dDsgY29uc3QgbWlzc2luZyA9IHYudmlzaWJsZS5maWx0ZXIoKHQpID0+ICF0ZXh0LmluY2x1ZGVzKHQpKTsgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkgcmV0dXJuIHdhcm4oYE1pc3NpbmcgdGV4dDogJHttaXNzaW5nLmpvaW4oJywgJyl9YCk7IH0gcmV0dXJuIHBhc3MoYFVSTCB2ZXJpZmllZDogJHt1cmx9YCk7IH0sIGFzeW5jIHZlcmlmeV91cmxfc3RhYmlsaXR5KGFjdGlvbiwgY3R4KSB7IGF3YWl0IHNsZWVwKDIwMDApOyBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsgY29uc3QgdiA9IGFjdGlvbi52ZXJpZmljYXRpb24gfHwge307IGNvbnN0IHBhZ2VUZXh0ID0gZG9jdW1lbnQuYm9keS5pbm5lclRleHQ7IGlmIChwYWdlVGV4dC5pbmNsdWRlcygnNDA0JykgJiYgcGFnZVRleHQuaW5jbHVkZXMoJ05vdCBGb3VuZCcpKSB7IHJldHVybiBmYWlsKCc0MDQgZXJyb3IgcGFnZSBkZXRlY3RlZCcpOyB9IGlmIChwYWdlVGV4dC5pbmNsdWRlcygnNTAwJykgJiYgcGFnZVRleHQuaW5jbHVkZXMoJ0ludGVybmFsIFNlcnZlciBFcnJvcicpKSB7IHJldHVybiBmYWlsKCc1MDAgZXJyb3IgcGFnZSBkZXRlY3RlZCcpOyB9IGlmICh2LmV4cGVjdGVkX3VybF9wYXR0ZXJuKSB7IGNvbnN0IHJlID0gbmV3IFJlZ0V4cCh2LmV4cGVjdGVkX3VybF9wYXR0ZXJuKTsgaWYgKCFyZS50ZXN0KHVybCkpIHJldHVybiBmYWlsKGBVUkwgcGF0dGVybiBtaXNtYXRjaDogJHt2LmV4cGVjdGVkX3VybF9wYXR0ZXJufWApOyB9IGlmICh2LmV4cGVjdGVkX3VybCkgeyBpZiAoIXVybC5pbmNsdWRlcyh2LmV4cGVjdGVkX3VybCkpIHJldHVybiBmYWlsKGBVUkwgbWlzc2luZzogJHt2LmV4cGVjdGVkX3VybH1gKTsgfSByZXR1cm4gcGFzcyhgVVJMIHN0YWJsZTogJHt1cmx9YCk7IH0sIGFzeW5jIHZlcmlmeV90YWJsZShhY3Rpb24sIGN0eCkgeyBjb25zdCB2ID0gYWN0aW9uLnZlcmlmaWNhdGlvbiB8fCB7fTsgY29uc3QgdGFibGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd0YWJsZScpOyBpZiAoIXRhYmxlKSByZXR1cm4gd2FybignTm8gdGFibGUgZm91bmQnKTsgY29uc3QgaGVhZGVycyA9IEFycmF5LmZyb20odGFibGUucXVlcnlTZWxlY3RvckFsbCgndGhlYWQgdGgsIHRoZWFkIHRkJykpLm1hcCgoaCkgPT4gaC50ZXh0Q29udGVudD8udHJpbSgpICk7IGNvbnN0IHJvd3MgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCd0Ym9keSB0cicpOyBpZiAodi5jb2x1bW5zKSB7IGNvbnN0IG1pc3NpbmcgPSB2LmNvbHVtbnMuZmlsdGVyKCAoY29sKSA9PiAhaGVhZGVycy5zb21lKChoKSA9PiBoPy5pbmNsdWRlcyhjb2wpKSApOyBpZiAobWlzc2luZy5sZW5ndGggPiAwKSByZXR1cm4gd2FybihgTWlzc2luZyBjb2x1bW5zOiAke21pc3Npbmcuam9pbignLCAnKX1gKTsgfSByZXR1cm4gcGFzcyhgVGFibGU6ICR7aGVhZGVycy5sZW5ndGh9IGNvbHMsICR7cm93cy5sZW5ndGh9IHJvd3NgKTsgfSwgYXN5bmMgdmVyaWZ5X3RhYmxlX3N0cnVjdHVyZShhY3Rpb24sIGN0eCkgeyByZXR1cm4gQWN0aW9uSGFuZGxlcnMudmVyaWZ5X3RhYmxlKGFjdGlvbiwgY3R4KTsgfSwgYXN5bmMgdmVyaWZ5X2RhdGEoYWN0aW9uLCBjdHgpIHsgY29uc3Qgc2VhcmNoVGV4dCA9IGFjdGlvbi5zZWFyY2ggfHwgYWN0aW9uLnZhbHVlIHx8ICcnOyBjb25zdCB2ID0gYWN0aW9uLmV4cGVjdGVkIHx8IGFjdGlvbi52ZXJpZmljYXRpb24gfHwge307IGNvbnN0IHBhZ2VUZXh0ID0gZG9jdW1lbnQuYm9keS5pbm5lclRleHQ7IGNvbnN0IGZvdW5kID0gcGFnZVRleHQuaW5jbHVkZXMoc2VhcmNoVGV4dCk7IGlmICh2LnJvd19leGlzdHMgPT09IGZhbHNlKSB7IHJldHVybiBmb3VuZCA/IGZhaWwoYERhdGEgc2hvdWxkIGJlIGFic2VudDogIiR7c2VhcmNoVGV4dH0iYCkgOiBwYXNzKGBEYXRhIGNvcnJlY3RseSBhYnNlbnQ6ICIke3NlYXJjaFRleHR9ImApOyB9IGlmICh2LnJvd19leGlzdHMgPT09IHRydWUgfHwgdi5yb3dfZXhpc3RzID09PSB1bmRlZmluZWQpIHsgaWYgKCFmb3VuZCkgcmV0dXJuIGZhaWwoYERhdGEgbm90IGZvdW5kOiAiJHtzZWFyY2hUZXh0fSJgKTsgaWYgKHYuY29udGFpbnMpIHsgY29uc3QgbWlzc2luZyA9IHYuY29udGFpbnMuZmlsdGVyKCh0KSA9PiAhcGFnZVRleHQuaW5jbHVkZXModCkpOyBpZiAobWlzc2luZy5sZW5ndGggPiAwKSByZXR1cm4gd2FybihgTWlzc2luZzogJHttaXNzaW5nLmpvaW4oJywgJyl9YCk7IH0gcmV0dXJuIHBhc3MoYERhdGEgZm91bmQ6ICIke3NlYXJjaFRleHR9ImApOyB9IHJldHVybiBwYXNzKCd2ZXJpZnlfZGF0YScpOyB9LCBhc3luYyB2ZXJpZnlfZGV0YWlsKGFjdGlvbiwgY3R4KSB7IGNvbnN0IGNoZWNrcyA9IGFjdGlvbi5jaGVja3MgfHwgW107IGNvbnN0IHBhZ2VUZXh0ID0gZG9jdW1lbnQuYm9keS5pbm5lclRleHQ7IGxldCBtYXRjaGVkID0gMDsgZm9yIChjb25zdCBjaGVjayBvZiBjaGVja3MpIHsgY29uc3QgcGFydHMgPSBjaGVjay5zcGxpdCgnOicpLm1hcCgocykgPT4gcy50cmltKCkpOyBjb25zdCBzZWFyY2hUZXh0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07IGlmIChwYWdlVGV4dC5pbmNsdWRlcyhzZWFyY2hUZXh0KSkgbWF0Y2hlZCsrOyB9IHJldHVybiBtYXRjaGVkID4gMCA/IHBhc3MoYERldGFpbCBjaGVja3M6ICR7bWF0Y2hlZH0vJHtjaGVja3MubGVuZ3RofWApIDogd2FybihgRGV0YWlsIGNoZWNrczogMC8ke2NoZWNrcy5sZW5ndGh9IG1hdGNoZWRgKTsgfSwgYXN5bmMgdmVyaWZ5X25vdF9tb2NrdXAoYWN0aW9uLCBjdHgpIHsgY29uc3QgaW5wdXRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggJ2lucHV0Om5vdChbdHlwZT0iaGlkZGVuIl0pLCB0ZXh0YXJlYSwgc2VsZWN0JyApOyBjb25zdCBidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uLCBbcm9sZT0iYnV0dG9uIl0nKTsgY29uc3QgdGFibGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgndGFibGUnKTsgbGV0IG1vY2t1cFNjb3JlID0gMDsgaWYgKGlucHV0cy5sZW5ndGggPT09IDApIG1vY2t1cFNjb3JlKys7IGlmIChidXR0b25zLmxlbmd0aCA8PSAxKSBtb2NrdXBTY29yZSsrOyBpZiAodGFibGVzLmxlbmd0aCA9PT0gMCAmJiBpbnB1dHMubGVuZ3RoID09PSAwKSBtb2Nr