diff --git a/app/script/runner_integration_test.go b/app/script/runner_integration_test.go index 6eba448..ab33ba7 100644 --- a/app/script/runner_integration_test.go +++ b/app/script/runner_integration_test.go @@ -391,7 +391,9 @@ func TestRunnerIntegration(t *testing.T) { Convey("runs async scripts", func() { var tests = []scriptTest{ {"nodejs_v8", `exports.default = (ctx) => { ctx.log('codebox'); abrakadabra }`}, + {"nodejs_v8", `exports.default = async (ctx) => { ctx.log('codebox'); abrakadabra }`}, {"nodejs_v12", `exports.default = (ctx) => { ctx.log('codebox'); abrakadabra }`}, + {"nodejs_v12", `exports.default = async (ctx) => { ctx.log('codebox'); abrakadabra }`}, } for _, data := range tests { hash := util.GenerateKey() diff --git a/assets/assets.go b/assets/assets.go index f9ac2ff..3c28420 100644 --- a/assets/assets.go +++ b/assets/assets.go @@ -1,6 +1,6 @@ // Code generated by go-bindata. DO NOT EDIT. // sources: -// assets/wrappers/node.js (10.576kB) +// assets/wrappers/node.js (10.602kB) package assets @@ -59,7 +59,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _wrappersNodeJs = "\x63\x6f\x6e\x73\x74\x20\x66\x73\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x66\x73\x27\x29\x0a\x63\x6f\x6e\x73\x74\x20\x70\x61\x74\x68\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x70\x61\x74\x68\x27\x29\x0a\x63\x6f\x6e\x73\x74\x20\x76\x6d\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x76\x6d\x27\x29\x0a\x63\x6f\x6e\x73\x74\x20\x6e\x65\x74\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x6e\x65\x74\x27\x29\x0a\x63\x6f\x6e\x73\x74\x20\x75\x74\x69\x6c\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x75\x74\x69\x6c\x27\x29\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x41\x50\x50\x5f\x50\x41\x54\x48\x20\x3d\x20\x27\x2f\x61\x70\x70\x2f\x63\x6f\x64\x65\x27\x0a\x63\x6f\x6e\x73\x74\x20\x41\x50\x50\x5f\x4c\x49\x53\x54\x45\x4e\x20\x3d\x20\x27\x2f\x74\x6d\x70\x2f\x77\x72\x61\x70\x70\x65\x72\x2e\x73\x6f\x63\x6b\x27\x0a\x63\x6f\x6e\x73\x74\x20\x43\x41\x43\x48\x45\x5f\x53\x4f\x43\x4b\x20\x3d\x20\x27\x2f\x74\x6d\x70\x2f\x63\x61\x63\x68\x65\x2e\x73\x6f\x63\x6b\x27\x0a\x63\x6f\x6e\x73\x74\x20\x45\x4e\x56\x5f\x50\x41\x54\x48\x20\x3d\x20\x27\x2f\x61\x70\x70\x2f\x65\x6e\x76\x27\x0a\x63\x6f\x6e\x73\x74\x20\x53\x54\x52\x45\x41\x4d\x5f\x53\x54\x44\x4f\x55\x54\x20\x3d\x20\x30\x0a\x63\x6f\x6e\x73\x74\x20\x53\x54\x52\x45\x41\x4d\x5f\x53\x54\x44\x45\x52\x52\x20\x3d\x20\x31\x0a\x63\x6f\x6e\x73\x74\x20\x53\x54\x52\x45\x41\x4d\x5f\x52\x45\x53\x50\x4f\x4e\x53\x45\x20\x3d\x20\x32\x0a\x63\x6f\x6e\x73\x74\x20\x53\x43\x52\x49\x50\x54\x5f\x46\x55\x4e\x43\x20\x3d\x20\x6e\x65\x77\x20\x76\x6d\x2e\x53\x63\x72\x69\x70\x74\x28\x60\x0a\x7b\x0a\x20\x20\x6c\x65\x74\x20\x5f\x5f\x66\x0a\x0a\x20\x20\x74\x72\x79\x20\x7b\x0a\x20\x20\x20\x20\x5f\x5f\x66\x20\x3d\x20\x5f\x5f\x66\x75\x6e\x63\x28\x7b\x0a\x20\x20\x20\x20\x20\x20\x61\x72\x67\x73\x3a\x20\x41\x52\x47\x53\x2c\x0a\x20\x20\x20\x20\x20\x20\x6d\x65\x74\x61\x3a\x20\x4d\x45\x54\x41\x2c\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x66\x69\x67\x3a\x20\x43\x4f\x4e\x46\x49\x47\x2c\x0a\x20\x20\x20\x20\x20\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x2c\x0a\x20\x20\x20\x20\x20\x20\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x3a\x20\x28\x72\x65\x73\x70\x6f\x6e\x73\x65\x29\x20\x3d\x3e\x20\x5f\x5f\x72\x75\x6e\x2e\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x72\x65\x73\x70\x6f\x6e\x73\x65\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x6c\x6f\x67\x3a\x20\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x20\x3d\x3e\x20\x5f\x5f\x72\x75\x6e\x2e\x6c\x6f\x67\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x65\x72\x72\x6f\x72\x3a\x20\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x20\x3d\x3e\x20\x5f\x5f\x72\x75\x6e\x2e\x65\x72\x72\x6f\x72\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x63\x61\x63\x68\x65\x3a\x20\x5f\x5f\x63\x61\x63\x68\x65\x2c\x0a\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x7d\x20\x63\x61\x74\x63\x68\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x5f\x5f\x63\x6f\x6e\x6e\x2e\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x5f\x66\x20\x3d\x20\x50\x72\x6f\x6d\x69\x73\x65\x2e\x72\x65\x73\x6f\x6c\x76\x65\x28\x5f\x5f\x66\x29\x0a\x0a\x20\x20\x5f\x5f\x66\x2e\x63\x61\x74\x63\x68\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x5f\x5f\x63\x6f\x6e\x6e\x2e\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x20\x20\x7d\x29\x0a\x0a\x20\x20\x5f\x5f\x66\x2e\x74\x68\x65\x6e\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x5f\x5f\x72\x75\x6e\x2e\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x72\x29\x0a\x20\x20\x20\x20\x5f\x5f\x63\x6f\x6e\x6e\x2e\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x29\x0a\x20\x20\x7d\x29\x0a\x7d\x60\x29\x0a\x0a\x6c\x65\x74\x20\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x0a\x6c\x65\x74\x20\x73\x63\x72\x69\x70\x74\x0a\x6c\x65\x74\x20\x73\x63\x72\x69\x70\x74\x46\x75\x6e\x63\x0a\x6c\x65\x74\x20\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x0a\x6c\x65\x74\x20\x73\x65\x74\x75\x70\x44\x6f\x6e\x65\x20\x3d\x20\x66\x61\x6c\x73\x65\x0a\x6c\x65\x74\x20\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x0a\x6c\x65\x74\x20\x74\x69\x6d\x65\x6f\x75\x74\x0a\x6c\x65\x74\x20\x63\x61\x63\x68\x65\x0a\x0a\x2f\x2f\x20\x50\x61\x74\x63\x68\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x65\x78\x69\x74\x2e\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x45\x78\x69\x74\x45\x72\x72\x6f\x72\x20\x28\x63\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x74\x68\x69\x73\x2e\x63\x6f\x64\x65\x20\x3d\x20\x63\x6f\x64\x65\x20\x21\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x20\x3f\x20\x63\x6f\x64\x65\x20\x3a\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x0a\x7d\x0a\x0a\x45\x78\x69\x74\x45\x72\x72\x6f\x72\x2e\x70\x72\x6f\x74\x6f\x74\x79\x70\x65\x20\x3d\x20\x6e\x65\x77\x20\x45\x72\x72\x6f\x72\x28\x29\x0a\x70\x72\x6f\x63\x65\x73\x73\x2e\x65\x78\x69\x74\x20\x3d\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x63\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x74\x68\x72\x6f\x77\x20\x6e\x65\x77\x20\x45\x78\x69\x74\x45\x72\x72\x6f\x72\x28\x63\x6f\x64\x65\x29\x0a\x7d\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x20\x3d\x20\x7b\x0a\x20\x20\x41\x50\x50\x5f\x50\x41\x54\x48\x2c\x0a\x20\x20\x45\x4e\x56\x5f\x50\x41\x54\x48\x2c\x0a\x20\x20\x5f\x5f\x66\x69\x6c\x65\x6e\x61\x6d\x65\x2c\x0a\x20\x20\x5f\x5f\x64\x69\x72\x6e\x61\x6d\x65\x2c\x0a\x0a\x20\x20\x2f\x2f\x20\x67\x6c\x6f\x62\x61\x6c\x73\x0a\x20\x20\x65\x78\x70\x6f\x72\x74\x73\x2c\x0a\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2c\x0a\x20\x20\x42\x75\x66\x66\x65\x72\x2c\x0a\x20\x20\x63\x6c\x65\x61\x72\x49\x6d\x6d\x65\x64\x69\x61\x74\x65\x2c\x0a\x20\x20\x63\x6c\x65\x61\x72\x49\x6e\x74\x65\x72\x76\x61\x6c\x2c\x0a\x20\x20\x63\x6c\x65\x61\x72\x54\x69\x6d\x65\x6f\x75\x74\x2c\x0a\x20\x20\x73\x65\x74\x49\x6d\x6d\x65\x64\x69\x61\x74\x65\x2c\x0a\x20\x20\x73\x65\x74\x49\x6e\x74\x65\x72\x76\x61\x6c\x2c\x0a\x20\x20\x73\x65\x74\x54\x69\x6d\x65\x6f\x75\x74\x2c\x0a\x20\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x2c\x0a\x20\x20\x6d\x6f\x64\x75\x6c\x65\x2c\x0a\x20\x20\x72\x65\x71\x75\x69\x72\x65\x0a\x7d\x0a\x0a\x2f\x2f\x20\x49\x6e\x6a\x65\x63\x74\x20\x67\x6c\x6f\x62\x61\x6c\x73\x20\x74\x6f\x20\x63\x6f\x6d\x6d\x6f\x6e\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x0a\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x67\x6c\x6f\x62\x61\x6c\x20\x3d\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x0a\x0a\x2f\x2f\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x63\x6c\x61\x73\x73\x2e\x0a\x63\x6c\x61\x73\x73\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x28\x73\x74\x61\x74\x75\x73\x43\x6f\x64\x65\x2c\x20\x63\x6f\x6e\x74\x65\x6e\x74\x2c\x20\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x2c\x20\x68\x65\x61\x64\x65\x72\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x74\x61\x74\x75\x73\x43\x6f\x64\x65\x20\x3d\x20\x73\x74\x61\x74\x75\x73\x43\x6f\x64\x65\x20\x7c\x7c\x20\x32\x30\x30\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x20\x3d\x20\x63\x6f\x6e\x74\x65\x6e\x74\x20\x7c\x7c\x20\x27\x27\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x20\x3d\x20\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x20\x7c\x7c\x20\x27\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x6a\x73\x6f\x6e\x27\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x20\x3d\x20\x68\x65\x61\x64\x65\x72\x73\x20\x7c\x7c\x20\x7b\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x6a\x73\x6f\x6e\x20\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x63\x6f\x6e\x73\x74\x20\x6b\x20\x69\x6e\x20\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x5b\x6b\x5d\x20\x3d\x20\x53\x74\x72\x69\x6e\x67\x28\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x5b\x6b\x5d\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x4a\x53\x4f\x4e\x2e\x73\x74\x72\x69\x6e\x67\x69\x66\x79\x28\x7b\x0a\x20\x20\x20\x20\x20\x20\x73\x63\x3a\x20\x70\x61\x72\x73\x65\x49\x6e\x74\x28\x74\x68\x69\x73\x2e\x73\x74\x61\x74\x75\x73\x43\x6f\x64\x65\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x3a\x20\x53\x74\x72\x69\x6e\x67\x28\x74\x68\x69\x73\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x68\x3a\x20\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x0a\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x3d\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x0a\x0a\x63\x6c\x61\x73\x73\x20\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x43\x6f\x6e\x74\x65\x78\x74\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x64\x65\x6c\x69\x6d\x2c\x20\x72\x75\x6e\x43\x74\x78\x29\x20\x7b\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x64\x65\x6c\x69\x6d\x20\x3d\x20\x64\x65\x6c\x69\x6d\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x20\x3d\x20\x72\x75\x6e\x43\x74\x78\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x6e\x75\x6c\x6c\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x65\x72\x72\x6f\x72\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x20\x45\x78\x69\x74\x45\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x65\x72\x72\x6f\x72\x2e\x63\x6f\x64\x65\x0a\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x65\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x65\x72\x72\x6f\x72\x2e\x74\x6f\x53\x74\x72\x69\x6e\x67\x28\x29\x2e\x73\x74\x61\x72\x74\x73\x57\x69\x74\x68\x28\x27\x45\x72\x72\x6f\x72\x3a\x20\x53\x63\x72\x69\x70\x74\x20\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x20\x74\x69\x6d\x65\x64\x20\x6f\x75\x74\x27\x29\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x31\x32\x34\x0a\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x31\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x28\x66\x69\x6e\x61\x6c\x20\x3d\x20\x66\x61\x6c\x73\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x21\x66\x69\x6e\x61\x6c\x20\x26\x26\x20\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x48\x61\x6e\x64\x6c\x65\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x2e\x0a\x20\x20\x20\x20\x6c\x65\x74\x20\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x21\x3d\x3d\x20\x6e\x75\x6c\x6c\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x53\x74\x72\x69\x6e\x67\x2e\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65\x28\x65\x78\x69\x74\x43\x6f\x64\x65\x29\x29\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x48\x61\x6e\x64\x6c\x65\x20\x73\x74\x64\x6f\x75\x74\x2c\x20\x73\x74\x64\x65\x72\x72\x20\x61\x6e\x64\x20\x6f\x75\x74\x70\x75\x74\x20\x72\x65\x73\x70\x6f\x6e\x73\x65\x2e\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x73\x74\x64\x6f\x75\x74\x2e\x6c\x65\x6e\x67\x74\x68\x20\x21\x3d\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x73\x65\x6e\x64\x44\x61\x74\x61\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2c\x20\x53\x54\x52\x45\x41\x4d\x5f\x53\x54\x44\x4f\x55\x54\x2c\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x73\x74\x64\x6f\x75\x74\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x73\x74\x64\x65\x72\x72\x2e\x6c\x65\x6e\x67\x74\x68\x20\x21\x3d\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x73\x65\x6e\x64\x44\x61\x74\x61\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2c\x20\x53\x54\x52\x45\x41\x4d\x5f\x53\x54\x44\x45\x52\x52\x2c\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x73\x74\x64\x65\x72\x72\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x21\x3d\x3d\x20\x6e\x75\x6c\x6c\x20\x26\x26\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x73\x65\x6e\x64\x44\x61\x74\x61\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2c\x20\x53\x54\x52\x45\x41\x4d\x5f\x52\x45\x53\x50\x4f\x4e\x53\x45\x2c\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x2e\x6a\x73\x6f\x6e\x28\x29\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x6c\x65\x74\x20\x63\x6f\x6e\x74\x65\x6e\x74\x20\x3d\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x74\x79\x70\x65\x6f\x66\x20\x28\x63\x6f\x6e\x74\x65\x6e\x74\x29\x20\x21\x3d\x3d\x20\x27\x73\x74\x72\x69\x6e\x67\x27\x20\x26\x26\x20\x21\x28\x63\x6f\x6e\x74\x65\x6e\x74\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x29\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x6e\x74\x20\x3d\x20\x4a\x53\x4f\x4e\x2e\x73\x74\x72\x69\x6e\x67\x69\x66\x79\x28\x63\x6f\x6e\x74\x65\x6e\x74\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x63\x6f\x6e\x74\x65\x6e\x74\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x65\x6e\x64\x28\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x63\x6c\x61\x73\x73\x20\x52\x75\x6e\x43\x6f\x6e\x74\x65\x78\x74\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x3d\x20\x6e\x75\x6c\x6c\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x74\x64\x6f\x75\x74\x20\x3d\x20\x27\x27\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x74\x64\x65\x72\x72\x20\x3d\x20\x27\x27\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x28\x72\x65\x73\x70\x6f\x6e\x73\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x72\x65\x73\x70\x6f\x6e\x73\x65\x20\x21\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x20\x26\x26\x20\x72\x65\x73\x70\x6f\x6e\x73\x65\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x3d\x20\x72\x65\x73\x70\x6f\x6e\x73\x65\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x6c\x6f\x67\x20\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x74\x64\x6f\x75\x74\x20\x2b\x3d\x20\x60\x24\x7b\x75\x74\x69\x6c\x2e\x66\x6f\x72\x6d\x61\x74\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x7d\x5c\x6e\x60\x0a\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x2e\x6c\x6f\x67\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x65\x72\x72\x6f\x72\x20\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x74\x64\x65\x72\x72\x20\x2b\x3d\x20\x60\x24\x7b\x75\x74\x69\x6c\x2e\x66\x6f\x72\x6d\x61\x74\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x7d\x5c\x6e\x60\x0a\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x2e\x65\x72\x72\x6f\x72\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x63\x6c\x61\x73\x73\x20\x43\x61\x63\x68\x65\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x20\x3d\x20\x6e\x75\x6c\x6c\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x20\x3d\x20\x5b\x5d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x70\x72\x6f\x63\x65\x73\x73\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x28\x72\x65\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x62\x20\x3d\x20\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x2e\x73\x68\x69\x66\x74\x28\x29\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x79\x70\x65\x6f\x66\x20\x63\x62\x20\x3d\x3d\x3d\x20\x27\x66\x75\x6e\x63\x74\x69\x6f\x6e\x27\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x62\x28\x72\x65\x73\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x2e\x6c\x65\x6e\x67\x74\x68\x20\x3d\x3d\x3d\x20\x30\x20\x26\x26\x20\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x75\x6e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x73\x6f\x63\x6b\x65\x74\x44\x61\x74\x61\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x2c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3e\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x6c\x65\x6e\x67\x74\x68\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3e\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x68\x75\x6e\x6b\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x73\x6c\x69\x63\x65\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x72\x65\x61\x64\x49\x6e\x74\x33\x32\x4c\x45\x28\x30\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x20\x3d\x3d\x3d\x20\x2d\x31\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x70\x72\x6f\x63\x65\x73\x73\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x6e\x75\x6c\x6c\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x3d\x20\x30\x0a\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x63\x6f\x70\x79\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2c\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x29\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x2b\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x6c\x65\x6e\x67\x74\x68\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x49\x66\x20\x77\x65\x27\x72\x65\x20\x6e\x6f\x74\x20\x64\x6f\x6e\x65\x20\x72\x65\x61\x64\x69\x6e\x67\x20\x61\x20\x70\x61\x63\x6b\x65\x74\x2c\x20\x72\x65\x74\x75\x72\x6e\x2e\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x3c\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x6c\x65\x6e\x67\x74\x68\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x70\x72\x6f\x63\x65\x73\x73\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x73\x6c\x69\x63\x65\x28\x34\x29\x29\x0a\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x6f\x63\x6b\x65\x74\x44\x61\x74\x61\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x2c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x67\x65\x74\x53\x6f\x63\x6b\x20\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x20\x3d\x3d\x20\x6e\x75\x6c\x6c\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x20\x3d\x20\x6e\x65\x77\x20\x6e\x65\x74\x2e\x53\x6f\x63\x6b\x65\x74\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x63\x6f\x6e\x6e\x65\x63\x74\x28\x43\x41\x43\x48\x45\x5f\x53\x4f\x43\x4b\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x75\x6e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x6e\x28\x27\x64\x61\x74\x61\x27\x2c\x20\x28\x63\x68\x75\x6e\x6b\x29\x20\x3d\x3e\x20\x74\x68\x69\x73\x2e\x5f\x73\x6f\x63\x6b\x65\x74\x44\x61\x74\x61\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x29\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x73\x65\x6e\x64\x43\x6f\x6d\x6d\x61\x6e\x64\x20\x28\x63\x6d\x64\x41\x72\x72\x61\x79\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x6e\x65\x77\x20\x50\x72\x6f\x6d\x69\x73\x65\x28\x28\x72\x65\x73\x6f\x6c\x76\x65\x2c\x20\x72\x65\x6a\x65\x63\x74\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x73\x6f\x63\x6b\x65\x74\x20\x3d\x20\x74\x68\x69\x73\x2e\x5f\x67\x65\x74\x53\x6f\x63\x6b\x28\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6c\x65\x6e\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x34\x29\x0a\x20\x20\x20\x20\x20\x20\x6c\x65\x6e\x2e\x77\x72\x69\x74\x65\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x63\x6d\x64\x41\x72\x72\x61\x79\x2e\x6c\x65\x6e\x67\x74\x68\x29\x0a\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x6c\x65\x6e\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x63\x6f\x6e\x73\x74\x20\x69\x20\x69\x6e\x20\x63\x6d\x64\x41\x72\x72\x61\x79\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6d\x64\x20\x3d\x20\x63\x6d\x64\x41\x72\x72\x61\x79\x5b\x69\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6c\x65\x6e\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x34\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x65\x6e\x2e\x77\x72\x69\x74\x65\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x42\x75\x66\x66\x65\x72\x2e\x62\x79\x74\x65\x4c\x65\x6e\x67\x74\x68\x28\x63\x6d\x64\x29\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x6c\x65\x6e\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x63\x6d\x64\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x20\x26\x26\x20\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x2e\x6c\x65\x6e\x67\x74\x68\x20\x3d\x3d\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x2e\x70\x75\x73\x68\x28\x72\x65\x73\x6f\x6c\x76\x65\x29\x0a\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x73\x65\x74\x20\x28\x6b\x65\x79\x2c\x20\x76\x61\x6c\x75\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x2e\x5f\x73\x65\x6e\x64\x43\x6f\x6d\x6d\x61\x6e\x64\x28\x5b\x27\x53\x45\x54\x27\x2c\x20\x6b\x65\x79\x2c\x20\x76\x61\x6c\x75\x65\x5d\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x67\x65\x74\x20\x28\x6b\x65\x79\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x2e\x5f\x73\x65\x6e\x64\x43\x6f\x6d\x6d\x61\x6e\x64\x28\x5b\x27\x47\x45\x54\x27\x2c\x20\x6b\x65\x79\x5d\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x73\x65\x6e\x64\x44\x61\x74\x61\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x74\x79\x70\x65\x2c\x20\x64\x61\x74\x61\x29\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x6c\x65\x6e\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x34\x29\x0a\x20\x20\x6c\x65\x6e\x2e\x77\x72\x69\x74\x65\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x42\x75\x66\x66\x65\x72\x2e\x62\x79\x74\x65\x4c\x65\x6e\x67\x74\x68\x28\x64\x61\x74\x61\x29\x29\x0a\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x53\x74\x72\x69\x6e\x67\x2e\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65\x28\x74\x79\x70\x65\x29\x29\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x6c\x65\x6e\x29\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x64\x61\x74\x61\x29\x0a\x7d\x0a\x0a\x2f\x2f\x20\x4d\x61\x69\x6e\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x73\x63\x72\x69\x70\x74\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x2e\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x70\x72\x6f\x63\x65\x73\x73\x53\x63\x72\x69\x70\x74\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x6f\x6e\x74\x65\x78\x74\x29\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x72\x75\x6e\x43\x74\x78\x20\x3d\x20\x6e\x65\x77\x20\x52\x75\x6e\x43\x6f\x6e\x74\x65\x78\x74\x28\x29\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6e\x6e\x43\x74\x78\x20\x3d\x20\x6e\x65\x77\x20\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x43\x6f\x6e\x74\x65\x78\x74\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x5f\x64\x65\x6c\x69\x6d\x2c\x20\x72\x75\x6e\x43\x74\x78\x29\x0a\x0a\x20\x20\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x20\x3d\x20\x63\x6f\x6e\x6e\x43\x74\x78\x0a\x0a\x20\x20\x2f\x2f\x20\x43\x72\x65\x61\x74\x65\x20\x73\x63\x72\x69\x70\x74\x20\x69\x66\x20\x69\x74\x27\x73\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x75\x6e\x2e\x0a\x20\x20\x69\x66\x20\x28\x73\x63\x72\x69\x70\x74\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x20\x3d\x20\x70\x61\x74\x68\x2e\x6a\x6f\x69\x6e\x28\x41\x50\x50\x5f\x50\x41\x54\x48\x2c\x20\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x73\x6f\x75\x72\x63\x65\x20\x3d\x20\x66\x73\x2e\x72\x65\x61\x64\x46\x69\x6c\x65\x53\x79\x6e\x63\x28\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x29\x0a\x0a\x20\x20\x20\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x6d\x6f\x64\x75\x6c\x65\x2e\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x3d\x20\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x0a\x20\x20\x20\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x5f\x5f\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x3d\x20\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x0a\x20\x20\x20\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x5f\x5f\x64\x69\x72\x6e\x61\x6d\x65\x20\x3d\x20\x70\x61\x74\x68\x2e\x64\x69\x72\x6e\x61\x6d\x65\x28\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x29\x0a\x0a\x20\x20\x20\x20\x73\x63\x72\x69\x70\x74\x20\x3d\x20\x6e\x65\x77\x20\x76\x6d\x2e\x53\x63\x72\x69\x70\x74\x28\x73\x6f\x75\x72\x63\x65\x2c\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x20\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x0a\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x2f\x2f\x20\x50\x72\x65\x70\x61\x72\x65\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x74\x78\x20\x3d\x20\x4f\x62\x6a\x65\x63\x74\x2e\x61\x73\x73\x69\x67\x6e\x28\x7b\x7d\x2c\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x29\x0a\x0a\x20\x20\x66\x6f\x72\x20\x28\x63\x6f\x6e\x73\x74\x20\x6b\x65\x79\x20\x69\x6e\x20\x63\x6f\x6e\x74\x65\x78\x74\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x6b\x65\x79\x2e\x73\x74\x61\x72\x74\x73\x57\x69\x74\x68\x28\x27\x5f\x27\x29\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x69\x6e\x75\x65\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x63\x74\x78\x5b\x6b\x65\x79\x5d\x20\x3d\x20\x63\x6f\x6e\x74\x65\x78\x74\x5b\x6b\x65\x79\x5d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x69\x66\x20\x28\x63\x61\x63\x68\x65\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x61\x63\x68\x65\x20\x3d\x20\x6e\x65\x77\x20\x43\x61\x63\x68\x65\x28\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x63\x74\x78\x2e\x5f\x5f\x63\x6f\x6e\x6e\x20\x3d\x20\x63\x6f\x6e\x6e\x43\x74\x78\x0a\x20\x20\x63\x74\x78\x2e\x5f\x5f\x72\x75\x6e\x20\x3d\x20\x72\x75\x6e\x43\x74\x78\x0a\x20\x20\x63\x74\x78\x2e\x5f\x5f\x63\x61\x63\x68\x65\x20\x3d\x20\x63\x61\x63\x68\x65\x0a\x20\x20\x2f\x2f\x20\x46\x6f\x72\x20\x62\x61\x63\x6b\x77\x61\x72\x64\x73\x20\x63\x6f\x6d\x70\x61\x74\x69\x62\x69\x6c\x69\x74\x79\x2e\x0a\x20\x20\x63\x74\x78\x2e\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x3d\x20\x28\x72\x29\x20\x3d\x3e\x20\x72\x75\x6e\x43\x74\x78\x2e\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x72\x29\x0a\x0a\x20\x20\x2f\x2f\x20\x52\x75\x6e\x20\x73\x63\x72\x69\x70\x74\x2e\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x6f\x70\x74\x73\x20\x3d\x20\x7b\x20\x74\x69\x6d\x65\x6f\x75\x74\x3a\x20\x74\x69\x6d\x65\x6f\x75\x74\x20\x2f\x20\x31\x65\x36\x20\x7d\x0a\x0a\x20\x20\x74\x72\x79\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x73\x63\x72\x69\x70\x74\x46\x75\x6e\x63\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x72\x65\x74\x20\x3d\x20\x73\x63\x72\x69\x70\x74\x2e\x72\x75\x6e\x49\x6e\x4e\x65\x77\x43\x6f\x6e\x74\x65\x78\x74\x28\x63\x74\x78\x2c\x20\x6f\x70\x74\x73\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x74\x79\x70\x65\x6f\x66\x20\x72\x65\x74\x20\x3d\x3d\x3d\x20\x27\x66\x75\x6e\x63\x74\x69\x6f\x6e\x27\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x63\x72\x69\x70\x74\x46\x75\x6e\x63\x20\x3d\x20\x72\x65\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x5f\x5f\x66\x75\x6e\x63\x20\x3d\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x5f\x5f\x66\x75\x6e\x63\x20\x3d\x20\x73\x63\x72\x69\x70\x74\x46\x75\x6e\x63\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x53\x43\x52\x49\x50\x54\x5f\x46\x55\x4e\x43\x2e\x72\x75\x6e\x49\x6e\x4e\x65\x77\x43\x6f\x6e\x74\x65\x78\x74\x28\x63\x74\x78\x2c\x20\x6f\x70\x74\x73\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x69\x66\x20\x28\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x6e\x43\x74\x78\x2e\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x52\x75\x6e\x20\x73\x63\x72\x69\x70\x74\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x69\x66\x20\x69\x74\x27\x73\x20\x64\x65\x66\x69\x6e\x65\x64\x2e\x0a\x20\x20\x20\x20\x20\x20\x53\x43\x52\x49\x50\x54\x5f\x46\x55\x4e\x43\x2e\x72\x75\x6e\x49\x6e\x4e\x65\x77\x43\x6f\x6e\x74\x65\x78\x74\x28\x63\x74\x78\x2c\x20\x6f\x70\x74\x73\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x20\x63\x61\x74\x63\x68\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6e\x6e\x43\x74\x78\x2e\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x6e\x43\x74\x78\x2e\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x2f\x2f\x20\x43\x72\x65\x61\x74\x65\x20\x73\x65\x72\x76\x65\x72\x20\x61\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x64\x61\x74\x61\x20\x6f\x6e\x20\x69\x74\x2e\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x70\x72\x6f\x63\x65\x73\x73\x44\x61\x74\x61\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x2c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x69\x66\x20\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3e\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x6c\x65\x6e\x67\x74\x68\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x69\x66\x20\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3e\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x68\x75\x6e\x6b\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x73\x6c\x69\x63\x65\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x69\x66\x20\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x72\x65\x61\x64\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x30\x29\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x3d\x20\x30\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x29\x0a\x20\x20\x7d\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x63\x6f\x70\x79\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2c\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x29\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x2b\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x6c\x65\x6e\x67\x74\x68\x0a\x0a\x20\x20\x2f\x2f\x20\x49\x66\x20\x77\x65\x27\x72\x65\x20\x6e\x6f\x74\x20\x64\x6f\x6e\x65\x20\x72\x65\x61\x64\x69\x6e\x67\x20\x61\x20\x70\x61\x63\x6b\x65\x74\x2c\x20\x72\x65\x74\x75\x72\x6e\x2e\x0a\x20\x20\x69\x66\x20\x28\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x3c\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x6c\x65\x6e\x67\x74\x68\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x69\x66\x20\x28\x21\x73\x65\x74\x75\x70\x44\x6f\x6e\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x2f\x2f\x20\x52\x65\x61\x64\x20\x73\x65\x74\x75\x70\x20\x4a\x53\x4f\x4e\x2e\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6d\x65\x73\x73\x61\x67\x65\x53\x69\x7a\x65\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x72\x65\x61\x64\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x30\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6d\x65\x73\x73\x61\x67\x65\x4a\x53\x4f\x4e\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x73\x6c\x69\x63\x65\x28\x34\x2c\x20\x34\x20\x2b\x20\x6d\x65\x73\x73\x61\x67\x65\x53\x69\x7a\x65\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6d\x65\x73\x73\x61\x67\x65\x20\x3d\x20\x4a\x53\x4f\x4e\x2e\x70\x61\x72\x73\x65\x28\x6d\x65\x73\x73\x61\x67\x65\x4a\x53\x4f\x4e\x29\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x50\x72\x6f\x63\x65\x73\x73\x20\x73\x65\x74\x75\x70\x20\x70\x61\x63\x6b\x61\x67\x65\x2e\x0a\x20\x20\x20\x20\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x20\x3d\x20\x6d\x65\x73\x73\x61\x67\x65\x2e\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x0a\x20\x20\x20\x20\x74\x69\x6d\x65\x6f\x75\x74\x20\x3d\x20\x6d\x65\x73\x73\x61\x67\x65\x2e\x74\x69\x6d\x65\x6f\x75\x74\x0a\x20\x20\x20\x20\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x20\x3d\x20\x6d\x65\x73\x73\x61\x67\x65\x2e\x61\x73\x79\x6e\x63\x20\x3e\x20\x31\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x53\x65\x74\x75\x70\x20\x6e\x6f\x6e\x20\x61\x73\x79\x6e\x63\x20\x6d\x6f\x64\x65\x20\x68\x6f\x6f\x6b\x73\x2e\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x6f\x6e\x28\x27\x75\x6e\x63\x61\x75\x67\x68\x74\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x27\x2c\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x2e\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x52\x65\x73\x74\x61\x72\x74\x20\x72\x65\x61\x64\x65\x72\x20\x62\x65\x66\x6f\x72\x65\x20\x65\x78\x69\x74\x2e\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x6f\x6e\x28\x27\x62\x65\x66\x6f\x72\x65\x45\x78\x69\x74\x27\x2c\x20\x28\x63\x6f\x64\x65\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x65\x72\x76\x65\x72\x2e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x2e\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x74\x72\x75\x65\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x73\x74\x64\x6f\x75\x74\x2e\x77\x72\x69\x74\x65\x28\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x2e\x64\x65\x6c\x69\x6d\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x73\x74\x64\x65\x72\x72\x2e\x77\x72\x69\x74\x65\x28\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x2e\x64\x65\x6c\x69\x6d\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x73\x65\x74\x75\x70\x44\x6f\x6e\x65\x20\x3d\x20\x74\x72\x75\x65\x0a\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x2f\x2f\x20\x52\x65\x61\x64\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x4a\x53\x4f\x4e\x2e\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6e\x74\x65\x78\x74\x53\x69\x7a\x65\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x72\x65\x61\x64\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x34\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6e\x74\x65\x78\x74\x4a\x53\x4f\x4e\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x73\x6c\x69\x63\x65\x28\x38\x2c\x20\x38\x20\x2b\x20\x63\x6f\x6e\x74\x65\x78\x74\x53\x69\x7a\x65\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x3d\x20\x4a\x53\x4f\x4e\x2e\x70\x61\x72\x73\x65\x28\x63\x6f\x6e\x74\x65\x78\x74\x4a\x53\x4f\x4e\x29\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x50\x72\x6f\x63\x65\x73\x73\x20\x66\x69\x6c\x65\x73\x20\x69\x6e\x74\x6f\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x41\x52\x47\x53\x2e\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x63\x6f\x6e\x74\x65\x78\x74\x2e\x5f\x66\x69\x6c\x65\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x41\x52\x47\x53\x20\x3d\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x41\x52\x47\x53\x20\x7c\x7c\x20\x7b\x7d\x0a\x20\x20\x20\x20\x20\x20\x6c\x65\x74\x20\x63\x75\x72\x73\x6f\x72\x20\x3d\x20\x38\x20\x2b\x20\x63\x6f\x6e\x74\x65\x78\x74\x53\x69\x7a\x65\x0a\x0a\x20\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x6c\x65\x74\x20\x69\x20\x3d\x20\x30\x3b\x20\x69\x20\x3c\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x5f\x66\x69\x6c\x65\x73\x2e\x6c\x65\x6e\x67\x74\x68\x3b\x20\x69\x2b\x2b\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x66\x69\x6c\x65\x20\x3d\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x5f\x66\x69\x6c\x65\x73\x5b\x69\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x62\x75\x66\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x73\x6c\x69\x63\x65\x28\x63\x75\x72\x73\x6f\x72\x2c\x20\x63\x75\x72\x73\x6f\x72\x20\x2b\x20\x66\x69\x6c\x65\x2e\x6c\x65\x6e\x67\x74\x68\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x62\x75\x66\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x20\x3d\x20\x66\x69\x6c\x65\x2e\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x62\x75\x66\x2e\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x3d\x20\x66\x69\x6c\x65\x2e\x66\x6e\x61\x6d\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x41\x52\x47\x53\x5b\x66\x69\x6c\x65\x2e\x6e\x61\x6d\x65\x5d\x20\x3d\x20\x62\x75\x66\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x75\x72\x73\x6f\x72\x20\x2b\x3d\x20\x66\x69\x6c\x65\x2e\x6c\x65\x6e\x67\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x72\x79\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x53\x63\x72\x69\x70\x74\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x6f\x6e\x74\x65\x78\x74\x29\x0a\x20\x20\x20\x20\x7d\x20\x66\x69\x6e\x61\x6c\x6c\x79\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x65\x72\x76\x65\x72\x2e\x75\x6e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x2f\x2f\x20\x43\x6c\x65\x61\x72\x20\x64\x61\x74\x61\x20\x66\x6f\x72\x20\x6e\x65\x78\x74\x20\x72\x65\x71\x75\x65\x73\x74\x2e\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x0a\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x44\x61\x74\x61\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x2c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x29\x0a\x7d\x0a\x0a\x76\x61\x72\x20\x73\x65\x72\x76\x65\x72\x20\x3d\x20\x6e\x65\x74\x2e\x63\x72\x65\x61\x74\x65\x53\x65\x72\x76\x65\x72\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x73\x6f\x63\x6b\x65\x74\x29\x20\x7b\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x6e\x28\x27\x64\x61\x74\x61\x27\x2c\x20\x28\x63\x68\x75\x6e\x6b\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x75\x6e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x44\x61\x74\x61\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x29\x0a\x20\x20\x7d\x29\x0a\x7d\x29\x0a\x0a\x2f\x2f\x20\x53\x74\x61\x72\x74\x20\x6c\x69\x73\x74\x65\x6e\x69\x6e\x67\x2e\x0a\x73\x65\x72\x76\x65\x72\x2e\x6c\x69\x73\x74\x65\x6e\x28\x41\x50\x50\x5f\x4c\x49\x53\x54\x45\x4e\x29\x0a\x73\x65\x72\x76\x65\x72\x2e\x6f\x6e\x28\x27\x6c\x69\x73\x74\x65\x6e\x69\x6e\x67\x27\x2c\x20\x28\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x2e\x6c\x6f\x67\x28\x41\x50\x50\x5f\x4c\x49\x53\x54\x45\x4e\x29\x0a\x7d\x29\x0a" +var _wrappersNodeJs = "\x63\x6f\x6e\x73\x74\x20\x66\x73\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x66\x73\x27\x29\x0a\x63\x6f\x6e\x73\x74\x20\x70\x61\x74\x68\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x70\x61\x74\x68\x27\x29\x0a\x63\x6f\x6e\x73\x74\x20\x76\x6d\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x76\x6d\x27\x29\x0a\x63\x6f\x6e\x73\x74\x20\x6e\x65\x74\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x6e\x65\x74\x27\x29\x0a\x63\x6f\x6e\x73\x74\x20\x75\x74\x69\x6c\x20\x3d\x20\x72\x65\x71\x75\x69\x72\x65\x28\x27\x75\x74\x69\x6c\x27\x29\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x41\x50\x50\x5f\x50\x41\x54\x48\x20\x3d\x20\x27\x2f\x61\x70\x70\x2f\x63\x6f\x64\x65\x27\x0a\x63\x6f\x6e\x73\x74\x20\x41\x50\x50\x5f\x4c\x49\x53\x54\x45\x4e\x20\x3d\x20\x27\x2f\x74\x6d\x70\x2f\x77\x72\x61\x70\x70\x65\x72\x2e\x73\x6f\x63\x6b\x27\x0a\x63\x6f\x6e\x73\x74\x20\x43\x41\x43\x48\x45\x5f\x53\x4f\x43\x4b\x20\x3d\x20\x27\x2f\x74\x6d\x70\x2f\x63\x61\x63\x68\x65\x2e\x73\x6f\x63\x6b\x27\x0a\x63\x6f\x6e\x73\x74\x20\x45\x4e\x56\x5f\x50\x41\x54\x48\x20\x3d\x20\x27\x2f\x61\x70\x70\x2f\x65\x6e\x76\x27\x0a\x63\x6f\x6e\x73\x74\x20\x53\x54\x52\x45\x41\x4d\x5f\x53\x54\x44\x4f\x55\x54\x20\x3d\x20\x30\x0a\x63\x6f\x6e\x73\x74\x20\x53\x54\x52\x45\x41\x4d\x5f\x53\x54\x44\x45\x52\x52\x20\x3d\x20\x31\x0a\x63\x6f\x6e\x73\x74\x20\x53\x54\x52\x45\x41\x4d\x5f\x52\x45\x53\x50\x4f\x4e\x53\x45\x20\x3d\x20\x32\x0a\x63\x6f\x6e\x73\x74\x20\x53\x43\x52\x49\x50\x54\x5f\x46\x55\x4e\x43\x20\x3d\x20\x6e\x65\x77\x20\x76\x6d\x2e\x53\x63\x72\x69\x70\x74\x28\x60\x0a\x7b\x0a\x20\x20\x6c\x65\x74\x20\x5f\x5f\x66\x0a\x0a\x20\x20\x74\x72\x79\x20\x7b\x0a\x20\x20\x20\x20\x5f\x5f\x66\x20\x3d\x20\x5f\x5f\x66\x75\x6e\x63\x28\x7b\x0a\x20\x20\x20\x20\x20\x20\x61\x72\x67\x73\x3a\x20\x41\x52\x47\x53\x2c\x0a\x20\x20\x20\x20\x20\x20\x6d\x65\x74\x61\x3a\x20\x4d\x45\x54\x41\x2c\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x66\x69\x67\x3a\x20\x43\x4f\x4e\x46\x49\x47\x2c\x0a\x20\x20\x20\x20\x20\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x2c\x0a\x20\x20\x20\x20\x20\x20\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x3a\x20\x28\x72\x65\x73\x70\x6f\x6e\x73\x65\x29\x20\x3d\x3e\x20\x5f\x5f\x72\x75\x6e\x2e\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x72\x65\x73\x70\x6f\x6e\x73\x65\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x6c\x6f\x67\x3a\x20\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x20\x3d\x3e\x20\x5f\x5f\x72\x75\x6e\x2e\x6c\x6f\x67\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x65\x72\x72\x6f\x72\x3a\x20\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x20\x3d\x3e\x20\x5f\x5f\x72\x75\x6e\x2e\x65\x72\x72\x6f\x72\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x63\x61\x63\x68\x65\x3a\x20\x5f\x5f\x63\x61\x63\x68\x65\x2c\x0a\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x7d\x20\x63\x61\x74\x63\x68\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x5f\x5f\x63\x6f\x6e\x6e\x2e\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x5f\x66\x20\x3d\x20\x50\x72\x6f\x6d\x69\x73\x65\x2e\x72\x65\x73\x6f\x6c\x76\x65\x28\x5f\x5f\x66\x29\x0a\x0a\x20\x20\x5f\x5f\x66\x2e\x63\x61\x74\x63\x68\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x5f\x5f\x63\x6f\x6e\x6e\x2e\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x20\x20\x20\x20\x5f\x5f\x63\x6f\x6e\x6e\x2e\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x29\x0a\x20\x20\x7d\x29\x0a\x0a\x20\x20\x5f\x5f\x66\x2e\x74\x68\x65\x6e\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x5f\x5f\x72\x75\x6e\x2e\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x72\x29\x0a\x20\x20\x20\x20\x5f\x5f\x63\x6f\x6e\x6e\x2e\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x29\x0a\x20\x20\x7d\x29\x0a\x7d\x60\x29\x0a\x0a\x6c\x65\x74\x20\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x0a\x6c\x65\x74\x20\x73\x63\x72\x69\x70\x74\x0a\x6c\x65\x74\x20\x73\x63\x72\x69\x70\x74\x46\x75\x6e\x63\x0a\x6c\x65\x74\x20\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x0a\x6c\x65\x74\x20\x73\x65\x74\x75\x70\x44\x6f\x6e\x65\x20\x3d\x20\x66\x61\x6c\x73\x65\x0a\x6c\x65\x74\x20\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x0a\x6c\x65\x74\x20\x74\x69\x6d\x65\x6f\x75\x74\x0a\x6c\x65\x74\x20\x63\x61\x63\x68\x65\x0a\x0a\x2f\x2f\x20\x50\x61\x74\x63\x68\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x65\x78\x69\x74\x2e\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x45\x78\x69\x74\x45\x72\x72\x6f\x72\x20\x28\x63\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x74\x68\x69\x73\x2e\x63\x6f\x64\x65\x20\x3d\x20\x63\x6f\x64\x65\x20\x21\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x20\x3f\x20\x63\x6f\x64\x65\x20\x3a\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x0a\x7d\x0a\x0a\x45\x78\x69\x74\x45\x72\x72\x6f\x72\x2e\x70\x72\x6f\x74\x6f\x74\x79\x70\x65\x20\x3d\x20\x6e\x65\x77\x20\x45\x72\x72\x6f\x72\x28\x29\x0a\x70\x72\x6f\x63\x65\x73\x73\x2e\x65\x78\x69\x74\x20\x3d\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x63\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x74\x68\x72\x6f\x77\x20\x6e\x65\x77\x20\x45\x78\x69\x74\x45\x72\x72\x6f\x72\x28\x63\x6f\x64\x65\x29\x0a\x7d\x0a\x0a\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x20\x3d\x20\x7b\x0a\x20\x20\x41\x50\x50\x5f\x50\x41\x54\x48\x2c\x0a\x20\x20\x45\x4e\x56\x5f\x50\x41\x54\x48\x2c\x0a\x20\x20\x5f\x5f\x66\x69\x6c\x65\x6e\x61\x6d\x65\x2c\x0a\x20\x20\x5f\x5f\x64\x69\x72\x6e\x61\x6d\x65\x2c\x0a\x0a\x20\x20\x2f\x2f\x20\x67\x6c\x6f\x62\x61\x6c\x73\x0a\x20\x20\x65\x78\x70\x6f\x72\x74\x73\x2c\x0a\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2c\x0a\x20\x20\x42\x75\x66\x66\x65\x72\x2c\x0a\x20\x20\x63\x6c\x65\x61\x72\x49\x6d\x6d\x65\x64\x69\x61\x74\x65\x2c\x0a\x20\x20\x63\x6c\x65\x61\x72\x49\x6e\x74\x65\x72\x76\x61\x6c\x2c\x0a\x20\x20\x63\x6c\x65\x61\x72\x54\x69\x6d\x65\x6f\x75\x74\x2c\x0a\x20\x20\x73\x65\x74\x49\x6d\x6d\x65\x64\x69\x61\x74\x65\x2c\x0a\x20\x20\x73\x65\x74\x49\x6e\x74\x65\x72\x76\x61\x6c\x2c\x0a\x20\x20\x73\x65\x74\x54\x69\x6d\x65\x6f\x75\x74\x2c\x0a\x20\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x2c\x0a\x20\x20\x6d\x6f\x64\x75\x6c\x65\x2c\x0a\x20\x20\x72\x65\x71\x75\x69\x72\x65\x0a\x7d\x0a\x0a\x2f\x2f\x20\x49\x6e\x6a\x65\x63\x74\x20\x67\x6c\x6f\x62\x61\x6c\x73\x20\x74\x6f\x20\x63\x6f\x6d\x6d\x6f\x6e\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x0a\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x67\x6c\x6f\x62\x61\x6c\x20\x3d\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x0a\x0a\x2f\x2f\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x63\x6c\x61\x73\x73\x2e\x0a\x63\x6c\x61\x73\x73\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x28\x73\x74\x61\x74\x75\x73\x43\x6f\x64\x65\x2c\x20\x63\x6f\x6e\x74\x65\x6e\x74\x2c\x20\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x2c\x20\x68\x65\x61\x64\x65\x72\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x74\x61\x74\x75\x73\x43\x6f\x64\x65\x20\x3d\x20\x73\x74\x61\x74\x75\x73\x43\x6f\x64\x65\x20\x7c\x7c\x20\x32\x30\x30\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x20\x3d\x20\x63\x6f\x6e\x74\x65\x6e\x74\x20\x7c\x7c\x20\x27\x27\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x20\x3d\x20\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x20\x7c\x7c\x20\x27\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x6a\x73\x6f\x6e\x27\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x20\x3d\x20\x68\x65\x61\x64\x65\x72\x73\x20\x7c\x7c\x20\x7b\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x6a\x73\x6f\x6e\x20\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x63\x6f\x6e\x73\x74\x20\x6b\x20\x69\x6e\x20\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x5b\x6b\x5d\x20\x3d\x20\x53\x74\x72\x69\x6e\x67\x28\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x5b\x6b\x5d\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x4a\x53\x4f\x4e\x2e\x73\x74\x72\x69\x6e\x67\x69\x66\x79\x28\x7b\x0a\x20\x20\x20\x20\x20\x20\x73\x63\x3a\x20\x70\x61\x72\x73\x65\x49\x6e\x74\x28\x74\x68\x69\x73\x2e\x73\x74\x61\x74\x75\x73\x43\x6f\x64\x65\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x63\x74\x3a\x20\x53\x74\x72\x69\x6e\x67\x28\x74\x68\x69\x73\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x29\x2c\x0a\x20\x20\x20\x20\x20\x20\x68\x3a\x20\x74\x68\x69\x73\x2e\x68\x65\x61\x64\x65\x72\x73\x0a\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x3d\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x0a\x0a\x63\x6c\x61\x73\x73\x20\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x43\x6f\x6e\x74\x65\x78\x74\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x64\x65\x6c\x69\x6d\x2c\x20\x72\x75\x6e\x43\x74\x78\x29\x20\x7b\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x64\x65\x6c\x69\x6d\x20\x3d\x20\x64\x65\x6c\x69\x6d\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x20\x3d\x20\x72\x75\x6e\x43\x74\x78\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x6e\x75\x6c\x6c\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x65\x72\x72\x6f\x72\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x20\x45\x78\x69\x74\x45\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x65\x72\x72\x6f\x72\x2e\x63\x6f\x64\x65\x0a\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x65\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x65\x72\x72\x6f\x72\x2e\x74\x6f\x53\x74\x72\x69\x6e\x67\x28\x29\x2e\x73\x74\x61\x72\x74\x73\x57\x69\x74\x68\x28\x27\x45\x72\x72\x6f\x72\x3a\x20\x53\x63\x72\x69\x70\x74\x20\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x20\x74\x69\x6d\x65\x64\x20\x6f\x75\x74\x27\x29\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x31\x32\x34\x0a\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x31\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x28\x66\x69\x6e\x61\x6c\x20\x3d\x20\x66\x61\x6c\x73\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x21\x66\x69\x6e\x61\x6c\x20\x26\x26\x20\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x48\x61\x6e\x64\x6c\x65\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x2e\x0a\x20\x20\x20\x20\x6c\x65\x74\x20\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x21\x3d\x3d\x20\x6e\x75\x6c\x6c\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x65\x78\x69\x74\x43\x6f\x64\x65\x20\x3d\x20\x74\x68\x69\x73\x2e\x65\x78\x69\x74\x43\x6f\x64\x65\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x53\x74\x72\x69\x6e\x67\x2e\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65\x28\x65\x78\x69\x74\x43\x6f\x64\x65\x29\x29\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x48\x61\x6e\x64\x6c\x65\x20\x73\x74\x64\x6f\x75\x74\x2c\x20\x73\x74\x64\x65\x72\x72\x20\x61\x6e\x64\x20\x6f\x75\x74\x70\x75\x74\x20\x72\x65\x73\x70\x6f\x6e\x73\x65\x2e\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x73\x74\x64\x6f\x75\x74\x2e\x6c\x65\x6e\x67\x74\x68\x20\x21\x3d\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x73\x65\x6e\x64\x44\x61\x74\x61\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2c\x20\x53\x54\x52\x45\x41\x4d\x5f\x53\x54\x44\x4f\x55\x54\x2c\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x73\x74\x64\x6f\x75\x74\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x73\x74\x64\x65\x72\x72\x2e\x6c\x65\x6e\x67\x74\x68\x20\x21\x3d\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x73\x65\x6e\x64\x44\x61\x74\x61\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2c\x20\x53\x54\x52\x45\x41\x4d\x5f\x53\x54\x44\x45\x52\x52\x2c\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x73\x74\x64\x65\x72\x72\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x21\x3d\x3d\x20\x6e\x75\x6c\x6c\x20\x26\x26\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x73\x65\x6e\x64\x44\x61\x74\x61\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2c\x20\x53\x54\x52\x45\x41\x4d\x5f\x52\x45\x53\x50\x4f\x4e\x53\x45\x2c\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x2e\x6a\x73\x6f\x6e\x28\x29\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x6c\x65\x74\x20\x63\x6f\x6e\x74\x65\x6e\x74\x20\x3d\x20\x74\x68\x69\x73\x2e\x72\x75\x6e\x43\x74\x78\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x74\x79\x70\x65\x6f\x66\x20\x28\x63\x6f\x6e\x74\x65\x6e\x74\x29\x20\x21\x3d\x3d\x20\x27\x73\x74\x72\x69\x6e\x67\x27\x20\x26\x26\x20\x21\x28\x63\x6f\x6e\x74\x65\x6e\x74\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x29\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x6e\x74\x20\x3d\x20\x4a\x53\x4f\x4e\x2e\x73\x74\x72\x69\x6e\x67\x69\x66\x79\x28\x63\x6f\x6e\x74\x65\x6e\x74\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x63\x6f\x6e\x74\x65\x6e\x74\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x65\x6e\x64\x28\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x63\x6c\x61\x73\x73\x20\x52\x75\x6e\x43\x6f\x6e\x74\x65\x78\x74\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x3d\x20\x6e\x75\x6c\x6c\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x74\x64\x6f\x75\x74\x20\x3d\x20\x27\x27\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x74\x64\x65\x72\x72\x20\x3d\x20\x27\x27\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x28\x72\x65\x73\x70\x6f\x6e\x73\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x72\x65\x73\x70\x6f\x6e\x73\x65\x20\x21\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x20\x26\x26\x20\x72\x65\x73\x70\x6f\x6e\x73\x65\x20\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x20\x48\x74\x74\x70\x52\x65\x73\x70\x6f\x6e\x73\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x6f\x75\x74\x70\x75\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x3d\x20\x72\x65\x73\x70\x6f\x6e\x73\x65\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x6c\x6f\x67\x20\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x74\x64\x6f\x75\x74\x20\x2b\x3d\x20\x60\x24\x7b\x75\x74\x69\x6c\x2e\x66\x6f\x72\x6d\x61\x74\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x7d\x5c\x6e\x60\x0a\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x2e\x6c\x6f\x67\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x65\x72\x72\x6f\x72\x20\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x74\x64\x65\x72\x72\x20\x2b\x3d\x20\x60\x24\x7b\x75\x74\x69\x6c\x2e\x66\x6f\x72\x6d\x61\x74\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x7d\x5c\x6e\x60\x0a\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x2e\x65\x72\x72\x6f\x72\x28\x64\x61\x74\x61\x2c\x20\x2e\x2e\x2e\x61\x72\x67\x73\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x63\x6c\x61\x73\x73\x20\x43\x61\x63\x68\x65\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x20\x3d\x20\x6e\x75\x6c\x6c\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x20\x3d\x20\x5b\x5d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x70\x72\x6f\x63\x65\x73\x73\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x28\x72\x65\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x62\x20\x3d\x20\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x2e\x73\x68\x69\x66\x74\x28\x29\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x79\x70\x65\x6f\x66\x20\x63\x62\x20\x3d\x3d\x3d\x20\x27\x66\x75\x6e\x63\x74\x69\x6f\x6e\x27\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x62\x28\x72\x65\x73\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x2e\x6c\x65\x6e\x67\x74\x68\x20\x3d\x3d\x3d\x20\x30\x20\x26\x26\x20\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x75\x6e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x73\x6f\x63\x6b\x65\x74\x44\x61\x74\x61\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x2c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3e\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x6c\x65\x6e\x67\x74\x68\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3e\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x68\x75\x6e\x6b\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x73\x6c\x69\x63\x65\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x72\x65\x61\x64\x49\x6e\x74\x33\x32\x4c\x45\x28\x30\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x20\x3d\x3d\x3d\x20\x2d\x31\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x70\x72\x6f\x63\x65\x73\x73\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x6e\x75\x6c\x6c\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x3d\x20\x30\x0a\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x63\x6f\x70\x79\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2c\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x29\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x2b\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x6c\x65\x6e\x67\x74\x68\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x49\x66\x20\x77\x65\x27\x72\x65\x20\x6e\x6f\x74\x20\x64\x6f\x6e\x65\x20\x72\x65\x61\x64\x69\x6e\x67\x20\x61\x20\x70\x61\x63\x6b\x65\x74\x2c\x20\x72\x65\x74\x75\x72\x6e\x2e\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x3c\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x6c\x65\x6e\x67\x74\x68\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x70\x72\x6f\x63\x65\x73\x73\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x73\x6c\x69\x63\x65\x28\x34\x29\x29\x0a\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x0a\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x5f\x73\x6f\x63\x6b\x65\x74\x44\x61\x74\x61\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x2c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x67\x65\x74\x53\x6f\x63\x6b\x20\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x20\x3d\x3d\x20\x6e\x75\x6c\x6c\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x20\x3d\x20\x6e\x65\x77\x20\x6e\x65\x74\x2e\x53\x6f\x63\x6b\x65\x74\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x63\x6f\x6e\x6e\x65\x63\x74\x28\x43\x41\x43\x48\x45\x5f\x53\x4f\x43\x4b\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x75\x6e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x6e\x28\x27\x64\x61\x74\x61\x27\x2c\x20\x28\x63\x68\x75\x6e\x6b\x29\x20\x3d\x3e\x20\x74\x68\x69\x73\x2e\x5f\x73\x6f\x63\x6b\x65\x74\x44\x61\x74\x61\x28\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x29\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x5f\x73\x65\x6e\x64\x43\x6f\x6d\x6d\x61\x6e\x64\x20\x28\x63\x6d\x64\x41\x72\x72\x61\x79\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x6e\x65\x77\x20\x50\x72\x6f\x6d\x69\x73\x65\x28\x28\x72\x65\x73\x6f\x6c\x76\x65\x2c\x20\x72\x65\x6a\x65\x63\x74\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x73\x6f\x63\x6b\x65\x74\x20\x3d\x20\x74\x68\x69\x73\x2e\x5f\x67\x65\x74\x53\x6f\x63\x6b\x28\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6c\x65\x6e\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x34\x29\x0a\x20\x20\x20\x20\x20\x20\x6c\x65\x6e\x2e\x77\x72\x69\x74\x65\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x63\x6d\x64\x41\x72\x72\x61\x79\x2e\x6c\x65\x6e\x67\x74\x68\x29\x0a\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x6c\x65\x6e\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x63\x6f\x6e\x73\x74\x20\x69\x20\x69\x6e\x20\x63\x6d\x64\x41\x72\x72\x61\x79\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6d\x64\x20\x3d\x20\x63\x6d\x64\x41\x72\x72\x61\x79\x5b\x69\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6c\x65\x6e\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x34\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x65\x6e\x2e\x77\x72\x69\x74\x65\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x42\x75\x66\x66\x65\x72\x2e\x62\x79\x74\x65\x4c\x65\x6e\x67\x74\x68\x28\x63\x6d\x64\x29\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x6c\x65\x6e\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x63\x6d\x64\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x20\x26\x26\x20\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x2e\x6c\x65\x6e\x67\x74\x68\x20\x3d\x3d\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x73\x6f\x63\x6b\x65\x74\x2e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x74\x68\x69\x73\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x5f\x71\x75\x65\x75\x65\x2e\x70\x75\x73\x68\x28\x72\x65\x73\x6f\x6c\x76\x65\x29\x0a\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x73\x65\x74\x20\x28\x6b\x65\x79\x2c\x20\x76\x61\x6c\x75\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x2e\x5f\x73\x65\x6e\x64\x43\x6f\x6d\x6d\x61\x6e\x64\x28\x5b\x27\x53\x45\x54\x27\x2c\x20\x6b\x65\x79\x2c\x20\x76\x61\x6c\x75\x65\x5d\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x67\x65\x74\x20\x28\x6b\x65\x79\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x2e\x5f\x73\x65\x6e\x64\x43\x6f\x6d\x6d\x61\x6e\x64\x28\x5b\x27\x47\x45\x54\x27\x2c\x20\x6b\x65\x79\x5d\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x73\x65\x6e\x64\x44\x61\x74\x61\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x74\x79\x70\x65\x2c\x20\x64\x61\x74\x61\x29\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x6c\x65\x6e\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x34\x29\x0a\x20\x20\x6c\x65\x6e\x2e\x77\x72\x69\x74\x65\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x42\x75\x66\x66\x65\x72\x2e\x62\x79\x74\x65\x4c\x65\x6e\x67\x74\x68\x28\x64\x61\x74\x61\x29\x29\x0a\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x53\x74\x72\x69\x6e\x67\x2e\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65\x28\x74\x79\x70\x65\x29\x29\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x6c\x65\x6e\x29\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x77\x72\x69\x74\x65\x28\x64\x61\x74\x61\x29\x0a\x7d\x0a\x0a\x2f\x2f\x20\x4d\x61\x69\x6e\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x73\x63\x72\x69\x70\x74\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x2e\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x70\x72\x6f\x63\x65\x73\x73\x53\x63\x72\x69\x70\x74\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x6f\x6e\x74\x65\x78\x74\x29\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x72\x75\x6e\x43\x74\x78\x20\x3d\x20\x6e\x65\x77\x20\x52\x75\x6e\x43\x6f\x6e\x74\x65\x78\x74\x28\x29\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6e\x6e\x43\x74\x78\x20\x3d\x20\x6e\x65\x77\x20\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x43\x6f\x6e\x74\x65\x78\x74\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x5f\x64\x65\x6c\x69\x6d\x2c\x20\x72\x75\x6e\x43\x74\x78\x29\x0a\x0a\x20\x20\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x20\x3d\x20\x63\x6f\x6e\x6e\x43\x74\x78\x0a\x0a\x20\x20\x2f\x2f\x20\x43\x72\x65\x61\x74\x65\x20\x73\x63\x72\x69\x70\x74\x20\x69\x66\x20\x69\x74\x27\x73\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x75\x6e\x2e\x0a\x20\x20\x69\x66\x20\x28\x73\x63\x72\x69\x70\x74\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x20\x3d\x20\x70\x61\x74\x68\x2e\x6a\x6f\x69\x6e\x28\x41\x50\x50\x5f\x50\x41\x54\x48\x2c\x20\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x73\x6f\x75\x72\x63\x65\x20\x3d\x20\x66\x73\x2e\x72\x65\x61\x64\x46\x69\x6c\x65\x53\x79\x6e\x63\x28\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x29\x0a\x0a\x20\x20\x20\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x6d\x6f\x64\x75\x6c\x65\x2e\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x3d\x20\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x0a\x20\x20\x20\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x5f\x5f\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x3d\x20\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x0a\x20\x20\x20\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x5f\x5f\x64\x69\x72\x6e\x61\x6d\x65\x20\x3d\x20\x70\x61\x74\x68\x2e\x64\x69\x72\x6e\x61\x6d\x65\x28\x73\x63\x72\x69\x70\x74\x46\x69\x6c\x65\x6e\x61\x6d\x65\x29\x0a\x0a\x20\x20\x20\x20\x73\x63\x72\x69\x70\x74\x20\x3d\x20\x6e\x65\x77\x20\x76\x6d\x2e\x53\x63\x72\x69\x70\x74\x28\x73\x6f\x75\x72\x63\x65\x2c\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3a\x20\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x0a\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x2f\x2f\x20\x50\x72\x65\x70\x61\x72\x65\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x74\x78\x20\x3d\x20\x4f\x62\x6a\x65\x63\x74\x2e\x61\x73\x73\x69\x67\x6e\x28\x7b\x7d\x2c\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x29\x0a\x0a\x20\x20\x66\x6f\x72\x20\x28\x63\x6f\x6e\x73\x74\x20\x6b\x65\x79\x20\x69\x6e\x20\x63\x6f\x6e\x74\x65\x78\x74\x29\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x6b\x65\x79\x2e\x73\x74\x61\x72\x74\x73\x57\x69\x74\x68\x28\x27\x5f\x27\x29\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x69\x6e\x75\x65\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x63\x74\x78\x5b\x6b\x65\x79\x5d\x20\x3d\x20\x63\x6f\x6e\x74\x65\x78\x74\x5b\x6b\x65\x79\x5d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x69\x66\x20\x28\x63\x61\x63\x68\x65\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x61\x63\x68\x65\x20\x3d\x20\x6e\x65\x77\x20\x43\x61\x63\x68\x65\x28\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x63\x74\x78\x2e\x5f\x5f\x63\x6f\x6e\x6e\x20\x3d\x20\x63\x6f\x6e\x6e\x43\x74\x78\x0a\x20\x20\x63\x74\x78\x2e\x5f\x5f\x72\x75\x6e\x20\x3d\x20\x72\x75\x6e\x43\x74\x78\x0a\x20\x20\x63\x74\x78\x2e\x5f\x5f\x63\x61\x63\x68\x65\x20\x3d\x20\x63\x61\x63\x68\x65\x0a\x20\x20\x2f\x2f\x20\x46\x6f\x72\x20\x62\x61\x63\x6b\x77\x61\x72\x64\x73\x20\x63\x6f\x6d\x70\x61\x74\x69\x62\x69\x6c\x69\x74\x79\x2e\x0a\x20\x20\x63\x74\x78\x2e\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x20\x3d\x20\x28\x72\x29\x20\x3d\x3e\x20\x72\x75\x6e\x43\x74\x78\x2e\x73\x65\x74\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x72\x29\x0a\x0a\x20\x20\x2f\x2f\x20\x52\x75\x6e\x20\x73\x63\x72\x69\x70\x74\x2e\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x6f\x70\x74\x73\x20\x3d\x20\x7b\x20\x74\x69\x6d\x65\x6f\x75\x74\x3a\x20\x74\x69\x6d\x65\x6f\x75\x74\x20\x2f\x20\x31\x65\x36\x20\x7d\x0a\x0a\x20\x20\x74\x72\x79\x20\x7b\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x73\x63\x72\x69\x70\x74\x46\x75\x6e\x63\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x72\x65\x74\x20\x3d\x20\x73\x63\x72\x69\x70\x74\x2e\x72\x75\x6e\x49\x6e\x4e\x65\x77\x43\x6f\x6e\x74\x65\x78\x74\x28\x63\x74\x78\x2c\x20\x6f\x70\x74\x73\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x74\x79\x70\x65\x6f\x66\x20\x72\x65\x74\x20\x3d\x3d\x3d\x20\x27\x66\x75\x6e\x63\x74\x69\x6f\x6e\x27\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x63\x72\x69\x70\x74\x46\x75\x6e\x63\x20\x3d\x20\x72\x65\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x74\x78\x2e\x5f\x5f\x66\x75\x6e\x63\x20\x3d\x20\x63\x6f\x6d\x6d\x6f\x6e\x43\x74\x78\x2e\x5f\x5f\x66\x75\x6e\x63\x20\x3d\x20\x73\x63\x72\x69\x70\x74\x46\x75\x6e\x63\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x53\x43\x52\x49\x50\x54\x5f\x46\x55\x4e\x43\x2e\x72\x75\x6e\x49\x6e\x4e\x65\x77\x43\x6f\x6e\x74\x65\x78\x74\x28\x63\x74\x78\x2c\x20\x6f\x70\x74\x73\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x69\x66\x20\x28\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x6e\x43\x74\x78\x2e\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x52\x75\x6e\x20\x73\x63\x72\x69\x70\x74\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x69\x66\x20\x69\x74\x27\x73\x20\x64\x65\x66\x69\x6e\x65\x64\x2e\x0a\x20\x20\x20\x20\x20\x20\x53\x43\x52\x49\x50\x54\x5f\x46\x55\x4e\x43\x2e\x72\x75\x6e\x49\x6e\x4e\x65\x77\x43\x6f\x6e\x74\x65\x78\x74\x28\x63\x74\x78\x2c\x20\x6f\x70\x74\x73\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x20\x63\x61\x74\x63\x68\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6e\x6e\x43\x74\x78\x2e\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x6e\x43\x74\x78\x2e\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x29\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x2f\x2f\x20\x43\x72\x65\x61\x74\x65\x20\x73\x65\x72\x76\x65\x72\x20\x61\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x64\x61\x74\x61\x20\x6f\x6e\x20\x69\x74\x2e\x0a\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x70\x72\x6f\x63\x65\x73\x73\x44\x61\x74\x61\x20\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x2c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3d\x20\x30\x29\x20\x7b\x0a\x20\x20\x69\x66\x20\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3e\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x6c\x65\x6e\x67\x74\x68\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x69\x66\x20\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3e\x20\x30\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x68\x75\x6e\x6b\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x73\x6c\x69\x63\x65\x28\x70\x6f\x73\x69\x74\x69\x6f\x6e\x29\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x69\x66\x20\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x3d\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x72\x65\x61\x64\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x30\x29\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x3d\x20\x30\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x20\x42\x75\x66\x66\x65\x72\x2e\x61\x6c\x6c\x6f\x63\x55\x6e\x73\x61\x66\x65\x28\x74\x6f\x74\x61\x6c\x53\x69\x7a\x65\x29\x0a\x20\x20\x7d\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x20\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x63\x6f\x70\x79\x28\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2c\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x29\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x2b\x3d\x20\x63\x68\x75\x6e\x6b\x2e\x6c\x65\x6e\x67\x74\x68\x0a\x0a\x20\x20\x2f\x2f\x20\x49\x66\x20\x77\x65\x27\x72\x65\x20\x6e\x6f\x74\x20\x64\x6f\x6e\x65\x20\x72\x65\x61\x64\x69\x6e\x67\x20\x61\x20\x70\x61\x63\x6b\x65\x74\x2c\x20\x72\x65\x74\x75\x72\x6e\x2e\x0a\x20\x20\x69\x66\x20\x28\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x66\x66\x73\x65\x74\x20\x3c\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x6c\x65\x6e\x67\x74\x68\x29\x20\x7b\x0a\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x69\x66\x20\x28\x21\x73\x65\x74\x75\x70\x44\x6f\x6e\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x2f\x2f\x20\x52\x65\x61\x64\x20\x73\x65\x74\x75\x70\x20\x4a\x53\x4f\x4e\x2e\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6d\x65\x73\x73\x61\x67\x65\x53\x69\x7a\x65\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x72\x65\x61\x64\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x30\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6d\x65\x73\x73\x61\x67\x65\x4a\x53\x4f\x4e\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x73\x6c\x69\x63\x65\x28\x34\x2c\x20\x34\x20\x2b\x20\x6d\x65\x73\x73\x61\x67\x65\x53\x69\x7a\x65\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x6d\x65\x73\x73\x61\x67\x65\x20\x3d\x20\x4a\x53\x4f\x4e\x2e\x70\x61\x72\x73\x65\x28\x6d\x65\x73\x73\x61\x67\x65\x4a\x53\x4f\x4e\x29\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x50\x72\x6f\x63\x65\x73\x73\x20\x73\x65\x74\x75\x70\x20\x70\x61\x63\x6b\x61\x67\x65\x2e\x0a\x20\x20\x20\x20\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x20\x3d\x20\x6d\x65\x73\x73\x61\x67\x65\x2e\x65\x6e\x74\x72\x79\x50\x6f\x69\x6e\x74\x0a\x20\x20\x20\x20\x74\x69\x6d\x65\x6f\x75\x74\x20\x3d\x20\x6d\x65\x73\x73\x61\x67\x65\x2e\x74\x69\x6d\x65\x6f\x75\x74\x0a\x20\x20\x20\x20\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x20\x3d\x20\x6d\x65\x73\x73\x61\x67\x65\x2e\x61\x73\x79\x6e\x63\x20\x3e\x20\x31\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x53\x65\x74\x75\x70\x20\x6e\x6f\x6e\x20\x61\x73\x79\x6e\x63\x20\x6d\x6f\x64\x65\x20\x68\x6f\x6f\x6b\x73\x2e\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x6f\x6e\x28\x27\x75\x6e\x63\x61\x75\x67\x68\x74\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x27\x2c\x20\x28\x65\x72\x72\x6f\x72\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x2e\x68\x61\x6e\x64\x6c\x65\x45\x72\x72\x6f\x72\x28\x65\x72\x72\x6f\x72\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x29\x0a\x0a\x20\x20\x20\x20\x20\x20\x2f\x2f\x20\x52\x65\x73\x74\x61\x72\x74\x20\x72\x65\x61\x64\x65\x72\x20\x62\x65\x66\x6f\x72\x65\x20\x65\x78\x69\x74\x2e\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x6f\x6e\x28\x27\x62\x65\x66\x6f\x72\x65\x45\x78\x69\x74\x27\x2c\x20\x28\x63\x6f\x64\x65\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x65\x72\x76\x65\x72\x2e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x2e\x73\x65\x6e\x64\x52\x65\x73\x70\x6f\x6e\x73\x65\x28\x74\x72\x75\x65\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x73\x74\x64\x6f\x75\x74\x2e\x77\x72\x69\x74\x65\x28\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x2e\x64\x65\x6c\x69\x6d\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x2e\x73\x74\x64\x65\x72\x72\x2e\x77\x72\x69\x74\x65\x28\x6c\x61\x73\x74\x43\x6f\x6e\x74\x65\x78\x74\x2e\x64\x65\x6c\x69\x6d\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x29\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x73\x65\x74\x75\x70\x44\x6f\x6e\x65\x20\x3d\x20\x74\x72\x75\x65\x0a\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x2f\x2f\x20\x52\x65\x61\x64\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x4a\x53\x4f\x4e\x2e\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6e\x74\x65\x78\x74\x53\x69\x7a\x65\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x72\x65\x61\x64\x55\x49\x6e\x74\x33\x32\x4c\x45\x28\x34\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6e\x74\x65\x78\x74\x4a\x53\x4f\x4e\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x73\x6c\x69\x63\x65\x28\x38\x2c\x20\x38\x20\x2b\x20\x63\x6f\x6e\x74\x65\x78\x74\x53\x69\x7a\x65\x29\x0a\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x3d\x20\x4a\x53\x4f\x4e\x2e\x70\x61\x72\x73\x65\x28\x63\x6f\x6e\x74\x65\x78\x74\x4a\x53\x4f\x4e\x29\x0a\x0a\x20\x20\x20\x20\x2f\x2f\x20\x50\x72\x6f\x63\x65\x73\x73\x20\x66\x69\x6c\x65\x73\x20\x69\x6e\x74\x6f\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x41\x52\x47\x53\x2e\x0a\x20\x20\x20\x20\x69\x66\x20\x28\x63\x6f\x6e\x74\x65\x78\x74\x2e\x5f\x66\x69\x6c\x65\x73\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x41\x52\x47\x53\x20\x3d\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x41\x52\x47\x53\x20\x7c\x7c\x20\x7b\x7d\x0a\x20\x20\x20\x20\x20\x20\x6c\x65\x74\x20\x63\x75\x72\x73\x6f\x72\x20\x3d\x20\x38\x20\x2b\x20\x63\x6f\x6e\x74\x65\x78\x74\x53\x69\x7a\x65\x0a\x0a\x20\x20\x20\x20\x20\x20\x66\x6f\x72\x20\x28\x6c\x65\x74\x20\x69\x20\x3d\x20\x30\x3b\x20\x69\x20\x3c\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x5f\x66\x69\x6c\x65\x73\x2e\x6c\x65\x6e\x67\x74\x68\x3b\x20\x69\x2b\x2b\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x66\x69\x6c\x65\x20\x3d\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x5f\x66\x69\x6c\x65\x73\x5b\x69\x5d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x73\x74\x20\x62\x75\x66\x20\x3d\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x2e\x73\x6c\x69\x63\x65\x28\x63\x75\x72\x73\x6f\x72\x2c\x20\x63\x75\x72\x73\x6f\x72\x20\x2b\x20\x66\x69\x6c\x65\x2e\x6c\x65\x6e\x67\x74\x68\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x62\x75\x66\x2e\x63\x6f\x6e\x74\x65\x6e\x74\x54\x79\x70\x65\x20\x3d\x20\x66\x69\x6c\x65\x2e\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x62\x75\x66\x2e\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x3d\x20\x66\x69\x6c\x65\x2e\x66\x6e\x61\x6d\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6f\x6e\x74\x65\x78\x74\x2e\x41\x52\x47\x53\x5b\x66\x69\x6c\x65\x2e\x6e\x61\x6d\x65\x5d\x20\x3d\x20\x62\x75\x66\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x63\x75\x72\x73\x6f\x72\x20\x2b\x3d\x20\x66\x69\x6c\x65\x2e\x6c\x65\x6e\x67\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x74\x72\x79\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x53\x63\x72\x69\x70\x74\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x6f\x6e\x74\x65\x78\x74\x29\x0a\x20\x20\x20\x20\x7d\x20\x66\x69\x6e\x61\x6c\x6c\x79\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x21\x61\x73\x79\x6e\x63\x4d\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x73\x65\x72\x76\x65\x72\x2e\x75\x6e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x7d\x0a\x0a\x20\x20\x2f\x2f\x20\x43\x6c\x65\x61\x72\x20\x64\x61\x74\x61\x20\x66\x6f\x72\x20\x6e\x65\x78\x74\x20\x72\x65\x71\x75\x65\x73\x74\x2e\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x62\x75\x66\x66\x65\x72\x20\x3d\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x0a\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x44\x61\x74\x61\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x2c\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x29\x0a\x7d\x0a\x0a\x76\x61\x72\x20\x73\x65\x72\x76\x65\x72\x20\x3d\x20\x6e\x65\x74\x2e\x63\x72\x65\x61\x74\x65\x53\x65\x72\x76\x65\x72\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x73\x6f\x63\x6b\x65\x74\x29\x20\x7b\x0a\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x6f\x6e\x28\x27\x64\x61\x74\x61\x27\x2c\x20\x28\x63\x68\x75\x6e\x6b\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x20\x20\x73\x6f\x63\x6b\x65\x74\x2e\x75\x6e\x72\x65\x66\x28\x29\x0a\x20\x20\x20\x20\x70\x72\x6f\x63\x65\x73\x73\x44\x61\x74\x61\x28\x73\x6f\x63\x6b\x65\x74\x2c\x20\x63\x68\x75\x6e\x6b\x29\x0a\x20\x20\x7d\x29\x0a\x7d\x29\x0a\x0a\x2f\x2f\x20\x53\x74\x61\x72\x74\x20\x6c\x69\x73\x74\x65\x6e\x69\x6e\x67\x2e\x0a\x73\x65\x72\x76\x65\x72\x2e\x6c\x69\x73\x74\x65\x6e\x28\x41\x50\x50\x5f\x4c\x49\x53\x54\x45\x4e\x29\x0a\x73\x65\x72\x76\x65\x72\x2e\x6f\x6e\x28\x27\x6c\x69\x73\x74\x65\x6e\x69\x6e\x67\x27\x2c\x20\x28\x29\x20\x3d\x3e\x20\x7b\x0a\x20\x20\x63\x6f\x6e\x73\x6f\x6c\x65\x2e\x6c\x6f\x67\x28\x41\x50\x50\x5f\x4c\x49\x53\x54\x45\x4e\x29\x0a\x7d\x29\x0a" func wrappersNodeJsBytes() ([]byte, error) { return bindataRead( @@ -75,7 +75,7 @@ func wrappersNodeJs() (*asset, error) { } info := bindataFileInfo{name: "wrappers/node.js", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1f, 0xe7, 0x7e, 0xd9, 0x40, 0x16, 0x29, 0x36, 0x10, 0xa8, 0x36, 0x40, 0x0, 0x39, 0x9e, 0x63, 0xae, 0x99, 0xfa, 0x6, 0xc9, 0xf9, 0xd8, 0xf7, 0x48, 0x23, 0x92, 0x75, 0x32, 0x8e, 0x4e, 0x4b}} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3b, 0x5e, 0xfe, 0x1d, 0xb5, 0x85, 0x91, 0x6d, 0x74, 0x74, 0xb3, 0x27, 0xad, 0xdd, 0xd, 0xcc, 0x95, 0xdd, 0xa1, 0x40, 0x9a, 0x4b, 0x62, 0xe9, 0x63, 0x5a, 0x27, 0xf4, 0x80, 0xd1, 0x38, 0x84}} return a, nil } diff --git a/assets/wrappers/node.js b/assets/wrappers/node.js index 4c8f9ba..cc686e4 100644 --- a/assets/wrappers/node.js +++ b/assets/wrappers/node.js @@ -34,6 +34,7 @@ const SCRIPT_FUNC = new vm.Script(` __f.catch(function (error) { __conn.handleError(error) + __conn.sendResponse() }) __f.then(function (r) { diff --git a/deploy/yaml/broker-hpa.yml.j2 b/deploy/yaml/broker-hpa.yml.j2 index 73a2a6f..5e1e5ad 100644 --- a/deploy/yaml/broker-hpa.yml.j2 +++ b/deploy/yaml/broker-hpa.yml.j2 @@ -1,12 +1,18 @@ +apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler -apiVersion: autoscaling/v1 metadata: name: codebox-broker spec: - minReplicas: {{ BROKER_MIN }} - maxReplicas: {{ BROKER_MAX }} scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: codebox-broker - targetCPUUtilizationPercentage: 80 + minReplicas: {{ BROKER_MIN }} + maxReplicas: {{ BROKER_MAX }} + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 80