diff --git a/.gitmodules b/.gitmodules index 46789ed1..678237a2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "plugin/Packages/Highlighter"] path = plugin/Packages/Highlighter url = https://github.com/boatbomber/highlighter.git +[submodule "plugin/Packages/msgpack-luau"] + path = plugin/Packages/msgpack-luau + url = https://github.com/cipharius/msgpack-luau diff --git a/Cargo.lock b/Cargo.lock index 7f9a58a7..49351dd3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2077,10 +2077,12 @@ dependencies = [ "rbx_xml", "reqwest", "ritz", + "rmp-serde", "roblox_install", "rojo-insta-ext", "semver", "serde", + "serde_bytes", "serde_json", "serde_yaml", "strum", @@ -2221,6 +2223,16 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde_bytes" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +dependencies = [ + "serde", + "serde_core", +] + [[package]] name = "serde_cbor" version = "0.11.2" diff --git a/Cargo.toml b/Cargo.toml index d8f34311..08879ab6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -104,6 +104,8 @@ data-encoding = "2.8.0" blake3 = "1.5.0" float-cmp = "0.9.0" indexmap = { version = "2.10.0", features = ["serde"] } +rmp-serde = "1.3.0" +serde_bytes = "0.11.19" [target.'cfg(windows)'.dependencies] winreg = "0.10.1" diff --git a/build.rs b/build.rs index 6bfd8e55..0f52585b 100644 --- a/build.rs +++ b/build.rs @@ -30,6 +30,11 @@ fn snapshot_from_fs_path(path: &Path) -> io::Result { continue; } + // Ignore images in msgpack-luau because they aren't UTF-8 encoded. + if file_name.ends_with(".png") { + continue; + } + let child_snapshot = snapshot_from_fs_path(&entry.path())?; children.push((file_name, child_snapshot)); } diff --git a/plugin/Packages/msgpack-luau/.gitignore b/plugin/Packages/msgpack-luau/.gitignore new file mode 100644 index 00000000..e08ff63c --- /dev/null +++ b/plugin/Packages/msgpack-luau/.gitignore @@ -0,0 +1,2 @@ +Packages +DevPackages diff --git a/plugin/Packages/msgpack-luau/LICENSE b/plugin/Packages/msgpack-luau/LICENSE new file mode 100644 index 00000000..d9ca8cf2 --- /dev/null +++ b/plugin/Packages/msgpack-luau/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Valts Liepiņš + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugin/Packages/msgpack-luau/README.md b/plugin/Packages/msgpack-luau/README.md new file mode 100644 index 00000000..fb9a041c --- /dev/null +++ b/plugin/Packages/msgpack-luau/README.md @@ -0,0 +1,103 @@ + +[latest release]: https://github.com/cipharius/msgpack-luau/releases/latest + + +[shield wally release]: https://img.shields.io/endpoint?url=https://runkit.io/clockworksquirrel/wally-version-shield/branches/master/cipharius/msgpack-luau&color=blue&label=wally&style=flat + +# MessagePack for Luau + +[![Wally release (latest)][shield wally release]][latest release] + +A pure MessagePack binary serialization format implementation in Luau. + +# Goals + +* Fulfill as much of MessagePack specification, as Luau allows +* Be on par with HttpService's `JSONEncode` and `JSONDecode` performance wise +* Keep code readable as long as it does not get in the way of prior goals + +## Example usage + +```lua +local msgpack = require(path.to.msgpack) +local message = msgpack.encode({"hello", "world", 123, key="value"}) + +for i,v in pairs(msgpack.decode(message)) do + print(i, v) +end + +-- To store MessagePack message in DataStore, it first needs to be wrapped in UTF8 format +-- This is not nescessary for HttpService or RemoteEvents! +local dataStore = game:GetService("DataStoreService"):GetGlobalDataStore() +dataStore:SetAsync("message", msgpack.utf8Encode(message)) + +local retrieved = msgpack.utf8Decode(dataStore:GetAsync("message")) +for i,v in pairs(msgpack.decode(retrieved)) do + print(i, v) +end +``` + +## API + +* `msgpack.encode(data: any): string` + + Encodes any pure Luau datatype in MessagePack binary string format. + It does not currently handle any Roblox specific datatypes. + +* `msgpack.decode(message: string): any` + + Decodes MessagePack binary string as pure Luau value. + +* `msgpack.utf8Encode(message: string): string` + + Wraps binary string in a UTF-8 compatible encoding. + Nescessary to save binary strings (like MessagePack serialized data) in DataStore. + +* `msgpack.utf8Decode(blob: string): string` + + Unwraps binary string from UTF-8 compatible encoding. + +* `msgpack.Extension.new(extensionType: number, blob: buffer): msgpack.Extension` + + Create MessagePack extension type, which is used for custom datatype serialization purposes. + First argument `extensionType` must be an integer. + +* `msgpack.Int64.new(mostSignificantPart: number, leastSignificantPart: number): msgpack.Int64` + + Represents 64-bit signed integer, which is too large to to represent as Luau integer. + Both arguments must be integers. + +* `msgpack.UInt64.new(mostSignificantPart: number, leastSignificantPart: number): msgpack.UInt64` + + Represents 64-bit unsigned integer, which is too large to to represent as Luau integer. + Both arguments must be integers. + +## Performance + +One of the project goals is to match or exceed the performance of Roblox offered data serialization and deserialization methods (HttpService's `JSONEncode` and `JSONDecode`). +To ensure fulfilment of this goal the module's methods need to be benchmarked. + +To benchmark message decoding performance an approximately 210KB large JSON encoded payload has been chosen. +This JSON is then used as input for `HttpService:JSONEncode()` method and also encoded in MessagePack format so that it can be used as input for `msgpack.decode()` function. +For MessagePack encoding [an online msgpack-lite encoder](https://kawanet.github.io/msgpack-lite/) was used. + +As visible in the [boatbomber's benchmarker plugin](https://devforum.roblox.com/t/benchmarker-plugin-compare-function-speeds-with-graphs-percentiles-and-more/829912) results, `msgpack.decode` considerably exceeds `JSONDecode` performance: +![Figure with JSONDecode and msgpack.decode benchmark results](./assets/decode-benchmark.png) + +To benchmark module's encoding performance same data is used as previously. +It is first decoded as table structure then both `msgpack.encode` and `JSONEncode` encode it with the following results: +![Figure with JSONEncode and msgpack.encode benchmark results](./assets/encode-benchmark.png) + +After transitioning to Luau buffer based encoding strategy, MessagePack encoder significantly exceeds the performance of the `JSONEncode` function. +An interesting observation can be made on how consistent is it's execution time, even in comparision with the `msgpack.decode`. +This is most likely is because `msgpack.encode` performs only a single dynamic allocation by computing the nescessary amount of bytes to encode the data and then allocates the result buffer in one go. + +Here is another benchmark which combines both decoding and encoding steps and as it can be seen, thanks to much greater `msgpack.decode` speed, both methods together perform better than built-in `JSONEncode` and `JSONDecode`: +![Figure with "JSONEncode & JSONDecode" and "msgpack.encode & msgpack.decode" benchmark results](./assets/decode-encode-benchmark.png) + +For more details on the benchmark setup, look into `./benchmark` directory. +To construct the benchmarking place, the following shell command was used: `rojo build -o benchmark.rbxl benchmark.project.json` + +## State of project + +Encoding and decoding fully works, extensions are currently not specially treated. diff --git a/plugin/Packages/msgpack-luau/assets/decode-benchmark.png b/plugin/Packages/msgpack-luau/assets/decode-benchmark.png new file mode 100644 index 00000000..05853512 Binary files /dev/null and b/plugin/Packages/msgpack-luau/assets/decode-benchmark.png differ diff --git a/plugin/Packages/msgpack-luau/assets/decode-encode-benchmark.png b/plugin/Packages/msgpack-luau/assets/decode-encode-benchmark.png new file mode 100644 index 00000000..4dcbe8e9 Binary files /dev/null and b/plugin/Packages/msgpack-luau/assets/decode-encode-benchmark.png differ diff --git a/plugin/Packages/msgpack-luau/assets/encode-benchmark.png b/plugin/Packages/msgpack-luau/assets/encode-benchmark.png new file mode 100644 index 00000000..178c7d3f Binary files /dev/null and b/plugin/Packages/msgpack-luau/assets/encode-benchmark.png differ diff --git a/plugin/Packages/msgpack-luau/benchmark.project.json b/plugin/Packages/msgpack-luau/benchmark.project.json new file mode 100644 index 00000000..83f19f01 --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark.project.json @@ -0,0 +1,17 @@ +{ + "name": "msgpack-luau", + "globIgnorePaths": ["**/*.spec.lua"], + "tree": { + "$className": "DataModel", + + "ReplicatedStorage": { + "$className": "ReplicatedStorage", + "$path": "src" + }, + + "ServerStorage": { + "$className": "ServerStorage", + "$path": "benchmark" + } + } +} diff --git a/plugin/Packages/msgpack-luau/benchmark/JsonMessage.lua b/plugin/Packages/msgpack-luau/benchmark/JsonMessage.lua new file mode 100644 index 00000000..32373e37 --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/JsonMessage.lua @@ -0,0 +1 @@ +return [======[{"sessionId":"474a8385-5a42-4d96-aa34-2d43fc917440","messageCursor":0,"instances":{"d539d2b3547c9166dae5ffd367a37cb3":{"Id":"d539d2b3547c9166dae5ffd367a37cb3","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Types","ClassName":"ModuleScript","Properties":{"Source":{"String":"local IContext: (obj: any) -> boolean = require(script.IContext)\nlocal ISubscription: (obj: any) -> boolean = require(script.ISubscription)\nlocal IWormhole: (obj: any) -> boolean = require(script.IWormhole)\nlocal ContextBlock: (obj: any) -> boolean = require(script.ContextBlock)\nlocal IPackage: (obj: any) -> boolean = require(script.IPackage)\n\nexport type IContext = IContext.IContext\nexport type ISubscription = ISubscription.ISubscription\nexport type IWormhole = IWormhole.IWormhole\nexport type ContextBlock = ContextBlock.ContextBlock\nexport type IPackage = IPackage.IPackage\n\nlocal Checks: { [string]: (obj: any) -> boolean } = {\n\t[\"isContext\"] = IContext,\n\t[\"isSubscription\"] = ISubscription,\n\t[\"isWormhole\"] = IWormhole,\n\t[\"isContextBlock\"] = ContextBlock,\n\t[\"isPackage\"] = IPackage,\n}\n\nreturn Checks\n"}},"Children":["133a9b005fbea6beac1d059ddc9fef0e","46bcc92ca5dc93da75ba685ae7cb4991","9c8522e307357cb958492ee98fd93042","6978a188358d64bfb2103712202a9922","c7c89a6fc94431da37e9bff85b81ab47"],"Metadata":{"ignoreUnknownInstances":false}},"6957f7983ac08acabf224266f365d3f7":{"Id":"6957f7983ac08acabf224266f365d3f7","Parent":"9cd69536a0dc973cffeed65b16a569e0","Name":"init.spec","ClassName":"ModuleScript","Properties":{"Source":{"String":"return function()\r\n\tlocal Promise = require(script.Parent)\r\n\tPromise.TEST = true\r\n\r\n\tlocal timeEvent = Instance.new(\"BindableEvent\")\r\n\tPromise._timeEvent = timeEvent.Event\r\n\r\n\tlocal advanceTime do\r\n\t\tlocal injectedPromiseTime = 0\r\n\r\n\t\tPromise._getTime = function()\r\n\t\t\treturn injectedPromiseTime\r\n\t\tend\r\n\r\n\t\tfunction advanceTime(delta)\r\n\t\t\tdelta = delta or (1/60)\r\n\r\n\t\t\tinjectedPromiseTime = injectedPromiseTime + delta\r\n\t\t\ttimeEvent:Fire(delta)\r\n\t\tend\r\n\tend\r\n\r\n\tlocal function pack(...)\r\n\t\tlocal len = select(\"#\", ...)\r\n\r\n\t\treturn len, { ... }\r\n\tend\r\n\r\n\tdescribe(\"Promise.Status\", function()\r\n\t\tit(\"should error if indexing nil value\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tlocal _ = Promise.Status.wrong\r\n\t\t\tend).to.throw()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.new\", function()\r\n\t\tit(\"should instantiate with a callback\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should invoke the given callback with resolve and reject\", function()\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal resolveArg\r\n\t\t\tlocal rejectArg\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve, reject)\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tresolveArg = resolve\r\n\t\t\t\trejectArg = reject\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(resolveArg).to.be.a(\"function\")\r\n\t\t\texpect(rejectArg).to.be.a(\"function\")\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\r\n\t\tit(\"should resolve promises on resolve()\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve)\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tresolve()\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject promises on reject()\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve, reject)\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\treject()\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject on error in callback\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.new(function()\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\terror(\"hahah\")\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(tostring(promise._values[1]):find(\"hahah\")).to.be.ok()\r\n\r\n\t\t\t-- Loosely check for the pieces of the stack trace we expect\r\n\t\t\texpect(tostring(promise._values[1]):find(\"init.spec\")).to.be.ok()\r\n\t\t\texpect(tostring(promise._values[1]):find(\"runExecutor\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should work with C functions\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tPromise.new(tick):andThen(tick)\r\n\t\t\tend).to.never.throw()\r\n\t\tend)\r\n\r\n\t\tit(\"should have a nice tostring\", function()\r\n\t\t\texpect(tostring(Promise.resolve()):gmatch(\"Promise(Resolved)\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should allow yielding\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\t\t\tlocal promise = Promise.new(function(resolve)\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\tresolve(5)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tbindable:Fire()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\t\tend)\r\n\r\n\t\tit(\"should preserve stack traces of resolve-chained promises\", function()\r\n\t\t\tlocal function nestedCall(text)\r\n\t\t\t\terror(text)\r\n\t\t\tend\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve)\r\n\t\t\t\tresolve(Promise.new(function()\r\n\t\t\t\t\tnestedCall(\"sample text\")\r\n\t\t\t\tend))\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\r\n\t\t\tlocal trace = tostring(promise._values[1])\r\n\t\t\texpect(trace:find(\"sample text\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"nestedCall\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"runExecutor\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"runPlanNode\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"...Rejected because it was chained to the following Promise, which encountered an error:\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should report errors from Promises with _error (< v2)\", function()\r\n\t\t\tlocal oldPromise = Promise.reject()\r\n\t\t\toldPromise._error = \"Sample error\"\r\n\r\n\t\t\tlocal newPromise = Promise.resolve():andThenReturn(oldPromise)\r\n\r\n\t\t\texpect(newPromise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\r\n\t\t\tlocal trace = tostring(newPromise._values[1])\r\n\t\t\texpect(trace:find(\"Sample error\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"...Rejected because it was chained to the following Promise, which encountered an error:\")).to.be.ok()\r\n\t\t\texpect(trace:find(\"%[No stack trace available\")).to.be.ok()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.defer\", function()\r\n\t\tit(\"should execute after the time event\", function()\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal promise = Promise.defer(function(resolve, reject, onCancel, nothing)\r\n\t\t\t\texpect(type(resolve)).to.equal(\"function\")\r\n\t\t\t\texpect(type(reject)).to.equal(\"function\")\r\n\t\t\t\texpect(type(onCancel)).to.equal(\"function\")\r\n\t\t\t\texpect(type(nothing)).to.equal(\"nil\")\r\n\r\n\t\t\t\tcallCount = callCount + 1\r\n\r\n\t\t\t\tresolve(\"foo\")\r\n\t\t\tend)\r\n\r\n\t\t\texpect(callCount).to.equal(0)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tadvanceTime()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\r\n\t\t\tadvanceTime()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.delay\", function()\r\n\t\tit(\"should schedule promise resolution\", function()\r\n\t\t\tlocal promise = Promise.delay(1)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tadvanceTime()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tadvanceTime(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\tend)\r\n\r\n\t\tit(\"should allow for delays to be cancelled\", function()\r\n\t\t\tlocal promise = Promise.delay(2)\r\n\r\n\t\t\tPromise.delay(1):andThen(function()\r\n\t\t\t promise:cancel()\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tadvanceTime()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tadvanceTime(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\tadvanceTime(1)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.resolve\", function()\r\n\t\tit(\"should immediately resolve with a value\", function()\r\n\t\t\tlocal promise = Promise.resolve(5, 6)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\t\t\texpect(promise._values[2]).to.equal(6)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto passed promises\", function()\r\n\t\t\tlocal promise = Promise.resolve(Promise.new(function(_, reject)\r\n\t\t\t\treject(7)\r\n\t\t\tend))\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(7)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.reject\", function()\r\n\t\tit(\"should immediately reject with a value\", function()\r\n\t\t\tlocal promise = Promise.reject(6, 7)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(6)\r\n\t\t\texpect(promise._values[2]).to.equal(7)\r\n\t\tend)\r\n\r\n\t\tit(\"should pass a promise as-is as an error\", function()\r\n\t\t\tlocal innerPromise = Promise.new(function(resolve)\r\n\t\t\t\tresolve(6)\r\n\t\t\tend)\r\n\r\n\t\t\tlocal promise = Promise.reject(innerPromise)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(innerPromise)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:andThen\", function()\r\n\t\tit(\"should allow yielding\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\t\t\tlocal promise = Promise.resolve():andThen(function()\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\treturn 5\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tbindable:Fire()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\t\tend)\r\n\r\n\t\tit(\"should run andThens on a new thread\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\r\n\t\t\tlocal resolve\r\n\t\t\tlocal parentPromise = Promise.new(function(_resolve)\r\n\t\t\t\tresolve = _resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal deadlockedPromise = parentPromise:andThen(function()\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\treturn 5\r\n\t\t\tend)\r\n\r\n\t\t\tlocal successfulPromise = parentPromise:andThen(function()\r\n\t\t\t\treturn \"foo\"\r\n\t\t\tend)\r\n\r\n\t\t\texpect(parentPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tresolve()\r\n\t\t\texpect(successfulPromise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(successfulPromise._values[1]).to.equal(\"foo\")\r\n\t\t\texpect(deadlockedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto resolved promises\", function()\r\n\t\t\tlocal args\r\n\t\t\tlocal argsLength\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal badCallCount = 0\r\n\r\n\t\t\tlocal promise = Promise.resolve(5)\r\n\r\n\t\t\tlocal chained = promise:andThen(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\targsLength, args = pack(...)\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend,\r\n\t\t\t\tfunction()\r\n\t\t\t\t\tbadCallCount = badCallCount + 1\r\n\t\t\t\tend\r\n\t\t\t)\r\n\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(argsLength).to.equal(1)\r\n\t\t\texpect(args[1]).to.equal(5)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\r\n\t\t\texpect(chained).to.be.ok()\r\n\t\t\texpect(chained).never.to.equal(promise)\r\n\t\t\texpect(chained:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#chained._values).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto rejected promises\", function()\r\n\t\t\tlocal args\r\n\t\t\tlocal argsLength\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal badCallCount = 0\r\n\r\n\t\t\tlocal promise = Promise.reject(5)\r\n\r\n\t\t\tlocal chained = promise:andThen(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\tbadCallCount = badCallCount + 1\r\n\t\t\t\tend,\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\targsLength, args = pack(...)\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend\r\n\t\t\t)\r\n\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(argsLength).to.equal(1)\r\n\t\t\texpect(args[1]).to.equal(5)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(5)\r\n\r\n\t\t\texpect(chained).to.be.ok()\r\n\t\t\texpect(chained).never.to.equal(promise)\r\n\t\t\texpect(chained:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#chained._values).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject on error in callback\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.resolve(1):andThen(function()\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\terror(\"hahah\")\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(tostring(promise._values[1]):find(\"hahah\")).to.be.ok()\r\n\r\n\t\t\t-- Loosely check for the pieces of the stack trace we expect\r\n\t\t\texpect(tostring(promise._values[1]):find(\"init.spec\")).to.be.ok()\r\n\t\t\texpect(tostring(promise._values[1]):find(\"runExecutor\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto asynchronously resolved promises\", function()\r\n\t\t\tlocal args\r\n\t\t\tlocal argsLength\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal badCallCount = 0\r\n\r\n\t\t\tlocal startResolution\r\n\t\t\tlocal promise = Promise.new(function(resolve)\r\n\t\t\t\tstartResolution = resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal chained = promise:andThen(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\targs = {...}\r\n\t\t\t\t\targsLength = select(\"#\", ...)\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend,\r\n\t\t\t\tfunction()\r\n\t\t\t\t\tbadCallCount = badCallCount + 1\r\n\t\t\t\tend\r\n\t\t\t)\r\n\r\n\t\t\texpect(callCount).to.equal(0)\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\tstartResolution(6)\r\n\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(argsLength).to.equal(1)\r\n\t\t\texpect(args[1]).to.equal(6)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(6)\r\n\r\n\t\t\texpect(chained).to.be.ok()\r\n\t\t\texpect(chained).never.to.equal(promise)\r\n\t\t\texpect(chained:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#chained._values).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto asynchronously rejected promises\", function()\r\n\t\t\tlocal args\r\n\t\t\tlocal argsLength\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal badCallCount = 0\r\n\r\n\t\t\tlocal startResolution\r\n\t\t\tlocal promise = Promise.new(function(_, reject)\r\n\t\t\t\tstartResolution = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal chained = promise:andThen(\r\n\t\t\t\tfunction()\r\n\t\t\t\t\tbadCallCount = badCallCount + 1\r\n\t\t\t\tend,\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\targs = {...}\r\n\t\t\t\t\targsLength = select(\"#\", ...)\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend\r\n\t\t\t)\r\n\r\n\t\t\texpect(callCount).to.equal(0)\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\tstartResolution(6)\r\n\r\n\t\t\texpect(badCallCount).to.equal(0)\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\t\texpect(argsLength).to.equal(1)\r\n\t\t\texpect(args[1]).to.equal(6)\r\n\r\n\t\t\texpect(promise).to.be.ok()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(6)\r\n\r\n\t\t\texpect(chained).to.be.ok()\r\n\t\t\texpect(chained).never.to.equal(promise)\r\n\t\t\texpect(chained:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#chained._values).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should propagate errors through multiple levels\", function()\r\n\t\t\tlocal x, y, z\r\n\t\t\tPromise.new(function(resolve, reject)\r\n\t\t\t\treject(1, 2, 3)\r\n\t\t\tend)\r\n\t\t\t:andThen(function() end)\r\n\t\t\t:catch(function(a, b, c)\r\n\t\t\t\tx, y, z = a, b, c\r\n\t\t\tend)\r\n\r\n\t\t\texpect(x).to.equal(1)\r\n\t\t\texpect(y).to.equal(2)\r\n\t\t\texpect(z).to.equal(3)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:cancel\", function()\r\n\t\tit(\"should mark promises as cancelled and not resolve or reject them\", function()\r\n\t\t\tlocal callCount = 0\r\n\t\t\tlocal finallyCallCount = 0\r\n\t\t\tlocal promise = Promise.new(function() end):andThen(function()\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\tend):finally(function()\r\n\t\t\t\tfinallyCallCount = finallyCallCount + 1\r\n\t\t\tend)\r\n\r\n\t\t\tpromise:cancel()\r\n\t\t\tpromise:cancel() -- Twice to check call counts\r\n\r\n\t\t\texpect(callCount).to.equal(0)\r\n\t\t\texpect(finallyCallCount).to.equal(1)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should call the cancellation hook once\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal promise = Promise.new(function(resolve, reject, onCancel)\r\n\t\t\t\tonCancel(function()\r\n\t\t\t\t\tcallCount = callCount + 1\r\n\t\t\t\tend)\r\n\t\t\tend)\r\n\r\n\t\t\tpromise:cancel()\r\n\t\t\tpromise:cancel() -- Twice to check call count\r\n\r\n\t\t\texpect(callCount).to.equal(1)\r\n\t\tend)\r\n\r\n\t\tit(\"should propagate cancellations\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\r\n\t\t\tlocal consumer1 = promise:andThen()\r\n\t\t\tlocal consumer2 = promise:andThen()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(consumer1:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(consumer2:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tconsumer1:cancel()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(consumer1:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(consumer2:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tconsumer2:cancel()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(consumer1:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(consumer2:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should affect downstream promises\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\t\t\tlocal consumer = promise:andThen()\r\n\r\n\t\t\tpromise:cancel()\r\n\r\n\t\t\texpect(consumer:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should track consumers\", function()\r\n\t\t\tlocal pending = Promise.new(function() end)\r\n\t\t\tlocal p0 = Promise.resolve()\r\n\t\t\tlocal p1 = p0:finally(function() return pending end)\r\n\t\t\tlocal p2 = Promise.new(function(resolve)\r\n\t\t\t\tresolve(p1)\r\n\t\t\tend)\r\n\t\t\tlocal p3 = p2:andThen(function() end)\r\n\r\n\t\t\texpect(p1._parent).to.never.equal(p0)\r\n\t\t\texpect(p2._parent).to.never.equal(p1)\r\n\t\t\texpect(p2._consumers[p3]).to.be.ok()\r\n\t\t\texpect(p3._parent).to.equal(p2)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel resolved pending promises\", function()\r\n\t\t\tlocal p1 = Promise.new(function() end)\r\n\r\n\t\t\tlocal p2 = Promise.new(function(resolve)\r\n\t\t\t\tresolve(p1)\r\n\t\t\tend):finally(function() end)\r\n\r\n\t\t\tp2:cancel()\r\n\r\n\t\t\texpect(p1._status).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(p2._status).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:finally\", function()\r\n\t\tit(\"should be called upon resolve, reject, or cancel\", function()\r\n\t\t\tlocal callCount = 0\r\n\r\n\t\t\tlocal function finally()\r\n\t\t\t\tcallCount = callCount + 1\r\n\t\t\tend\r\n\r\n\t\t\t-- Resolved promise\r\n\t\t\tPromise.new(function(resolve, reject)\r\n\t\t\t\tresolve()\r\n\t\t\tend):finally(finally)\r\n\r\n\t\t\t-- Chained promise\r\n\t\t\tPromise.resolve():andThen(function()\r\n\r\n\t\t\tend):finally(finally):finally(finally)\r\n\r\n\t\t\t-- Rejected promise\r\n\t\t\tPromise.reject():finally(finally)\r\n\r\n\t\t\tlocal cancelledPromise = Promise.new(function() end):finally(finally)\r\n\t\t\tcancelledPromise:cancel()\r\n\r\n\t\t\texpect(callCount).to.equal(5)\r\n\t\tend)\r\n\r\n\t\tit(\"should be a child of the parent Promise\", function()\r\n\t\t\tlocal p1 = Promise.new(function() end)\r\n\t\t\tlocal p2 = p1:finally(function() end)\r\n\r\n\t\t\texpect(p2._parent).to.equal(p1)\r\n\t\t\texpect(p1._consumers[p2]).to.equal(true)\r\n\t\tend)\r\n\r\n\t\tit(\"should forward return values\", function()\r\n\t\t\tlocal value\r\n\r\n\t\t\tPromise.resolve():finally(function()\r\n\t\t\t\treturn 1\r\n\t\t\tend):andThen(function(v)\r\n\t\t\t\tvalue = v\r\n\t\t\tend)\r\n\r\n\t\t\texpect(value).to.equal(1)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.all\", function()\r\n\t\tit(\"should error if given something other than a table\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tPromise.all(1)\r\n\t\t\tend).to.throw()\r\n\t\tend)\r\n\r\n\t\tit(\"should resolve instantly with an empty table if given no promises\", function()\r\n\t\t\tlocal promise = Promise.all({})\r\n\t\t\tlocal success, value = promise:_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(true)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(value).to.be.a(\"table\")\r\n\t\t\texpect(next(value)).to.equal(nil)\r\n\t\tend)\r\n\r\n\t\tit(\"should error if given non-promise values\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tPromise.all({{}, {}, {}})\r\n\t\t\tend).to.throw()\r\n\t\tend)\r\n\r\n\t\tit(\"should wait for all promises to be resolved and return their values\", function()\r\n\t\t\tlocal resolveFunctions = {}\r\n\r\n\t\t\tlocal testValuesLength, testValues = pack(1, \"A string\", nil, false)\r\n\r\n\t\t\tlocal promises = {}\r\n\r\n\t\t\tfor i = 1, testValuesLength do\r\n\t\t\t\tpromises[i] = Promise.new(function(resolve)\r\n\t\t\t\t\tresolveFunctions[i] = {resolve, testValues[i]}\r\n\t\t\t\tend)\r\n\t\t\tend\r\n\r\n\t\t\tlocal combinedPromise = Promise.all(promises)\r\n\r\n\t\t\tfor _, resolve in ipairs(resolveFunctions) do\r\n\t\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\t\tresolve[1](resolve[2])\r\n\t\t\tend\r\n\r\n\t\t\tlocal resultLength, result = pack(combinedPromise:_unwrap())\r\n\t\t\tlocal success, resolved = unpack(result, 1, resultLength)\r\n\r\n\t\t\texpect(resultLength).to.equal(2)\r\n\t\t\texpect(success).to.equal(true)\r\n\t\t\texpect(resolved).to.be.a(\"table\")\r\n\t\t\texpect(#resolved).to.equal(#promises)\r\n\r\n\t\t\tfor i = 1, testValuesLength do\r\n\t\t\t\texpect(resolved[i]).to.equal(testValues[i])\r\n\t\t\tend\r\n\t\tend)\r\n\r\n\t\tit(\"should reject if any individual promise rejected\", function()\r\n\t\t\tlocal rejectA\r\n\t\t\tlocal resolveB\r\n\r\n\t\t\tlocal a = Promise.new(function(_, reject)\r\n\t\t\t\trejectA = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal b = Promise.new(function(resolve)\r\n\t\t\t\tresolveB = resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal combinedPromise = Promise.all({a, b})\r\n\r\n\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\trejectA(\"baz\", \"qux\")\r\n\t\t\tresolveB(\"foo\", \"bar\")\r\n\r\n\t\t\tlocal resultLength, result = pack(combinedPromise:_unwrap())\r\n\t\t\tlocal success, first, second = unpack(result, 1, resultLength)\r\n\r\n\t\t\texpect(resultLength).to.equal(3)\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(first).to.equal(\"baz\")\r\n\t\t\texpect(second).to.equal(\"qux\")\r\n\t\t\texpect(b:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should not resolve if resolved after rejecting\", function()\r\n\t\t\tlocal rejectA\r\n\t\t\tlocal resolveB\r\n\r\n\t\t\tlocal a = Promise.new(function(_, reject)\r\n\t\t\t\trejectA = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal b = Promise.new(function(resolve)\r\n\t\t\t\tresolveB = resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal combinedPromise = Promise.all({a, b})\r\n\r\n\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\trejectA(\"baz\", \"qux\")\r\n\t\t\tresolveB(\"foo\", \"bar\")\r\n\r\n\t\t\tlocal resultLength, result = pack(combinedPromise:_unwrap())\r\n\t\t\tlocal success, first, second = unpack(result, 1, resultLength)\r\n\r\n\t\t\texpect(resultLength).to.equal(3)\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(first).to.equal(\"baz\")\r\n\t\t\texpect(second).to.equal(\"qux\")\r\n\t\tend)\r\n\r\n\t\tit(\"should only reject once\", function()\r\n\t\t\tlocal rejectA\r\n\t\t\tlocal rejectB\r\n\r\n\t\t\tlocal a = Promise.new(function(_, reject)\r\n\t\t\t\trejectA = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal b = Promise.new(function(_, reject)\r\n\t\t\t\trejectB = reject\r\n\t\t\tend)\r\n\r\n\t\t\tlocal combinedPromise = Promise.all({a, b})\r\n\r\n\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\trejectA(\"foo\", \"bar\")\r\n\r\n\t\t\texpect(combinedPromise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\r\n\t\t\trejectB(\"baz\", \"qux\")\r\n\r\n\t\t\tlocal resultLength, result = pack(combinedPromise:_unwrap())\r\n\t\t\tlocal success, first, second = unpack(result, 1, resultLength)\r\n\r\n\t\t\texpect(resultLength).to.equal(3)\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(first).to.equal(\"foo\")\r\n\t\t\texpect(second).to.equal(\"bar\")\r\n\t\tend)\r\n\r\n\t\tit(\"should error if a non-array table is passed in\", function()\r\n\t\t\tlocal ok, err = pcall(function()\r\n\t\t\t\tPromise.all(Promise.new(function() end))\r\n\t\t\tend)\r\n\r\n\t\t\texpect(ok).to.be.ok()\r\n\t\t\texpect(err:find(\"Non%-promise\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel pending promises if one rejects\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\texpect(Promise.all({\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.reject(),\r\n\t\t\t\tp\r\n\t\t\t}):getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel promises if it is cancelled\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\tp:andThen(function() end)\r\n\r\n\t\t\tlocal promises = {\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tp\r\n\t\t\t}\r\n\r\n\t\t\tPromise.all(promises):cancel()\r\n\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.fold\", function()\r\n\t\tit(\"should return the initial value in a promise when the list is empty\", function()\r\n\t\t\tlocal initialValue = {}\r\n\t\t\tlocal result = Promise.fold({}, function()\r\n\t\t\t\terror(\"should not be called\")\r\n\t\t\tend, initialValue)\r\n\r\n\t\t\texpect(Promise.is(result)).to.equal(true)\r\n\t\t\texpect(result:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(result:expect()).to.equal(initialValue)\r\n\t\tend)\r\n\r\n\t\tit(\"should accept promises in the list\", function()\r\n\t\t\tlocal sum = Promise.fold({Promise.resolve(1), 2, 3}, function(sum, element)\r\n\t\t\t\treturn sum + element\r\n\t\t\tend, 0)\r\n\t\t\texpect(Promise.is(sum)).to.equal(true)\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(sum:expect()).to.equal(6)\r\n\t\tend)\r\n\r\n\t\tit(\"should always return a promise even if the list or reducer don't use them\", function()\r\n\t\t\tlocal sum = Promise.fold({1, 2, 3}, function(sum, element, index)\r\n\t\t\t\tif index == 2 then\r\n\t\t\t\t\treturn Promise.delay(1):andThenReturn(sum + element)\r\n\t\t\t\telse\r\n\t\t\t\t\treturn sum + element\r\n\t\t\t\tend\r\n\t\t\tend, 0)\r\n\t\t\texpect(Promise.is(sum)).to.equal(true)\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tadvanceTime(2)\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(sum:expect()).to.equal(6)\r\n\t\tend)\r\n\r\n\t\tit(\"should return the first rejected promise\", function()\r\n\t\t\tlocal errorMessage = \"foo\"\r\n\t\t\tlocal sum = Promise.fold({1, 2, 3}, function(sum, element, index)\r\n\t\t\t\tif index == 2 then\r\n\t\t\t\t\treturn Promise.reject(errorMessage)\r\n\t\t\t\telse\r\n\t\t\t\t\treturn sum + element\r\n\t\t\t\tend\r\n\t\t\tend, 0)\r\n\t\t\texpect(Promise.is(sum)).to.equal(true)\r\n\t\t\tlocal status, rejection = sum:awaitStatus()\r\n\t\t\texpect(status).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(rejection).to.equal(errorMessage)\r\n\t\tend)\r\n\r\n\t\tit(\"should return the first canceled promise\", function()\r\n\t\t\tlocal secondPromise\r\n\t\t\tlocal sum = Promise.fold({1, 2, 3}, function(sum, element, index)\r\n\t\t\t\tif index == 1 then\r\n\t\t\t\t\treturn sum + element\r\n\t\t\t\telseif index == 2 then\r\n\t\t\t\t\tsecondPromise = Promise.delay(1):andThenReturn(sum + element)\r\n\t\t\t\t\treturn secondPromise\r\n\t\t\t\telse\r\n\t\t\t\t\terror('this should not run if the promise is cancelled')\r\n\t\t\t\tend\r\n\t\t\tend, 0)\r\n\t\t\texpect(Promise.is(sum)).to.equal(true)\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tsecondPromise:cancel()\r\n\t\t\texpect(sum:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.race\", function()\r\n\t\tit(\"should resolve with the first settled value\", function()\r\n\t\t\tlocal promise = Promise.race({\r\n\t\t\t\tPromise.resolve(1),\r\n\t\t\t\tPromise.resolve(2)\r\n\t\t\t}):andThen(function(value)\r\n\t\t\t\texpect(value).to.equal(1)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel other promises\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\t\t\tpromise:andThen(function() end)\r\n\t\t\tlocal promises = {\r\n\t\t\t\tpromise,\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function(resolve)\r\n\t\t\t\t\tresolve(2)\r\n\t\t\t\tend)\r\n\t\t\t}\r\n\r\n\t\t\tlocal promise = Promise.race(promises)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(2)\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Resolved)\r\n\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\texpect(Promise.race({\r\n\t\t\t\tPromise.reject(),\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tp\r\n\t\t\t}):getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should error if a non-array table is passed in\", function()\r\n\t\t\tlocal ok, err = pcall(function()\r\n\t\t\t\tPromise.race(Promise.new(function() end))\r\n\t\t\tend)\r\n\r\n\t\t\texpect(ok).to.be.ok()\r\n\t\t\texpect(err:find(\"Non%-promise\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel promises if it is cancelled\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\tp:andThen(function() end)\r\n\r\n\t\t\tlocal promises = {\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tp\r\n\t\t\t}\r\n\r\n\t\t\tPromise.race(promises):cancel()\r\n\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.promisify\", function()\r\n\t\tit(\"should wrap functions\", function()\r\n\t\t\tlocal function test(n)\r\n\t\t\t\treturn n + 1\r\n\t\t\tend\r\n\r\n\t\t\tlocal promisified = Promise.promisify(test)\r\n\t\t\tlocal promise = promisified(1)\r\n\t\t\tlocal success, result = promise:_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(true)\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(result).to.equal(2)\r\n\t\tend)\r\n\r\n\t\tit(\"should catch errors after a yield\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\t\t\tlocal test = Promise.promisify(function ()\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\terror('errortext')\r\n\t\t\tend)\r\n\r\n\t\t\tlocal promise = test()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tbindable:Fire()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(tostring(promise._values[1]):find(\"errortext\")).to.be.ok()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.tap\", function()\r\n\t\tit(\"should thread through values\", function()\r\n\t\t\tlocal first, second\r\n\r\n\t\t\tPromise.resolve(1)\r\n\t\t\t\t:andThen(function(v)\r\n\t\t\t\t\treturn v + 1\r\n\t\t\t\tend)\r\n\t\t\t\t:tap(function(v)\r\n\t\t\t\t\tfirst = v\r\n\t\t\t\t\treturn v + 1\r\n\t\t\t\tend)\r\n\t\t\t\t:andThen(function(v)\r\n\t\t\t\t\tsecond = v\r\n\t\t\t\tend)\r\n\r\n\t\t\texpect(first).to.equal(2)\r\n\t\t\texpect(second).to.equal(2)\r\n\t\tend)\r\n\r\n\t\tit(\"should chain onto promises\", function()\r\n\t\t\tlocal resolveInner, finalValue\r\n\r\n\t\t\tlocal promise = Promise.resolve(1)\r\n\t\t\t\t:tap(function()\r\n\t\t\t\t\treturn Promise.new(function(resolve)\r\n\t\t\t\t\t\tresolveInner = resolve\r\n\t\t\t\t\tend)\r\n\t\t\t\tend)\r\n\t\t\t\t:andThen(function(v)\r\n\t\t\t\t\tfinalValue = v\r\n\t\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(finalValue).to.never.be.ok()\r\n\r\n\t\t\tresolveInner(1)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(finalValue).to.equal(1)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.try\", function()\r\n\t\tit(\"should catch synchronous errors\", function()\r\n\t\t\tlocal errorText\r\n\t\t\tPromise.try(function()\r\n\t\t\t\terror('errortext')\r\n\t\t\tend):catch(function(e)\r\n\t\t\t\terrorText = tostring(e)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(errorText:find(\"errortext\")).to.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should reject with error objects\", function()\r\n\t\t\tlocal object = {}\r\n\t\t\tlocal success, value = Promise.try(function()\r\n\t\t\t\terror(object)\r\n\t\t\tend):_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(value).to.equal(object)\r\n\t\tend)\r\n\r\n\t\tit(\"should catch asynchronous errors\", function()\r\n\t\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\t\t\tlocal promise = Promise.try(function()\r\n\t\t\t\tbindable.Event:Wait()\r\n\t\t\t\terror('errortext')\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\tbindable:Fire()\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(tostring(promise._values[1]):find(\"errortext\")).to.be.ok()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:andThenReturn\", function()\r\n\t\tit(\"should return the given values\", function()\r\n\t\t\tlocal value1, value2\r\n\r\n\t\t\tPromise.resolve():andThenReturn(1, 2):andThen(function(one, two)\r\n\t\t\t\tvalue1 = one\r\n\t\t\t\tvalue2 = two\r\n\t\t\tend)\r\n\r\n\t\t\texpect(value1).to.equal(1)\r\n\t\t\texpect(value2).to.equal(2)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:doneReturn\", function()\r\n\t\tit(\"should return the given values\", function()\r\n\t\t\tlocal value1, value2\r\n\r\n\t\t\tPromise.resolve():doneReturn(1, 2):andThen(function(one, two)\r\n\t\t\t\tvalue1 = one\r\n\t\t\t\tvalue2 = two\r\n\t\t\tend)\r\n\r\n\t\t\texpect(value1).to.equal(1)\r\n\t\t\texpect(value2).to.equal(2)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:andThenCall\", function()\r\n\t\tit(\"should call the given function with arguments\", function()\r\n\t\t\tlocal value1, value2\r\n\t\t\tPromise.resolve():andThenCall(function(a, b)\r\n\t\t\t\tvalue1 = a\r\n\t\t\t\tvalue2 = b\r\n\t\t\tend, 3, 4)\r\n\r\n\t\t\texpect(value1).to.equal(3)\r\n\t\t\texpect(value2).to.equal(4)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:doneCall\", function()\r\n\t\tit(\"should call the given function with arguments\", function()\r\n\t\t\tlocal value1, value2\r\n\t\t\tPromise.resolve():doneCall(function(a, b)\r\n\t\t\t\tvalue1 = a\r\n\t\t\t\tvalue2 = b\r\n\t\t\tend, 3, 4)\r\n\r\n\t\t\texpect(value1).to.equal(3)\r\n\t\t\texpect(value2).to.equal(4)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:done\", function()\r\n\t\tit(\"should trigger on resolve or cancel\", function()\r\n\t\t\tlocal promise = Promise.new(function() end)\r\n\t\t\tlocal value\r\n\r\n\t\t\tlocal p = promise:done(function()\r\n\t\t\t\tvalue = true\r\n\t\t\tend)\r\n\r\n\t\t\texpect(value).to.never.be.ok()\r\n\t\t\tpromise:cancel()\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(value).to.equal(true)\r\n\r\n\t\t\tlocal never, always\r\n\t\t\tPromise.reject():done(function()\r\n\t\t\t\tnever = true\r\n\t\t\tend):finally(function()\r\n\t\t\t\talways = true\r\n\t\t\tend)\r\n\r\n\t\t\texpect(never).to.never.be.ok()\r\n\t\t\texpect(always).to.be.ok()\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.some\", function()\r\n\t\tit(\"should resolve once the goal is reached\", function()\r\n\t\t\tlocal p = Promise.some({\r\n\t\t\t\tPromise.resolve(1),\r\n\t\t\t\tPromise.reject(),\r\n\t\t\t\tPromise.resolve(2)\r\n\t\t\t}, 2)\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(p._values[1][1]).to.equal(1)\r\n\t\t\texpect(p._values[1][2]).to.equal(2)\r\n\t\tend)\r\n\r\n\t\tit(\"should error if the goal can't be reached\", function()\r\n\t\t\texpect(Promise.some({\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.reject()\r\n\t\t\t}, 2):getStatus()).to.equal(Promise.Status.Rejected)\r\n\r\n\t\t\tlocal reject\r\n\t\t\tlocal p = Promise.some({\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.new(function(_, r) reject = r end)\r\n\t\t\t}, 2)\r\n\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\treject(\"foo\")\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(p._values[1]).to.equal(\"foo\")\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel pending Promises once the goal is reached\", function()\r\n\t\t\tlocal resolve\r\n\t\t\tlocal pending1 = Promise.new(function() end)\r\n\t\t\tlocal pending2 = Promise.new(function(r) resolve = r end)\r\n\r\n\t\t\tlocal some = Promise.some({\r\n\t\t\t\tpending1,\r\n\t\t\t\tpending2,\r\n\t\t\t\tPromise.resolve()\r\n\t\t\t}, 2)\r\n\r\n\t\t\texpect(some:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(pending1:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(pending2:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tresolve()\r\n\r\n\t\t\texpect(some:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(pending1:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(pending2:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\tend)\r\n\r\n\t\tit(\"should error if passed a non-number\", function()\r\n\t\t\texpect(function()\r\n\t\t\t\tPromise.some({}, \"non-number\")\r\n\t\t\tend).to.throw()\r\n\t\tend)\r\n\r\n\t\tit(\"should return an empty array if amount is 0\", function()\r\n\t\t\tlocal p = Promise.some({\r\n\t\t\t\tPromise.resolve(2)\r\n\t\t\t}, 0)\r\n\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#p._values[1]).to.equal(0)\r\n\t\tend)\r\n\r\n\t\tit(\"should not return extra values\", function()\r\n\t\t\tlocal p = Promise.some({\r\n\t\t\t\tPromise.resolve(1),\r\n\t\t\t\tPromise.resolve(2),\r\n\t\t\t\tPromise.resolve(3),\r\n\t\t\t\tPromise.resolve(4),\r\n\t\t\t}, 2)\r\n\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(#p._values[1]).to.equal(2)\r\n\t\t\texpect(p._values[1][1]).to.equal(1)\r\n\t\t\texpect(p._values[1][2]).to.equal(2)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel promises if it is cancelled\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\tp:andThen(function() end)\r\n\r\n\t\t\tlocal promises = {\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tp\r\n\t\t\t}\r\n\r\n\t\t\tPromise.some(promises, 3):cancel()\r\n\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\r\n\t\tdescribe(\"Promise.any\", function()\r\n\t\t\tit(\"should return the value directly\", function()\r\n\t\t\t\tlocal p = Promise.any({\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t\tPromise.resolve(1)\r\n\t\t\t\t})\r\n\r\n\t\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\t\texpect(p._values[1]).to.equal(1)\r\n\t\t\tend)\r\n\r\n\t\t\tit(\"should error if all are rejected\", function()\r\n\t\t\t\texpect(Promise.any({\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t\tPromise.reject(),\r\n\t\t\t\t}):getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\tend)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.allSettled\", function()\r\n\t\tit(\"should resolve with an array of PromiseStatuses\", function()\r\n\t\t\tlocal reject\r\n\t\t\tlocal p = Promise.allSettled({\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.reject(),\r\n\t\t\t\tPromise.resolve(),\r\n\t\t\t\tPromise.new(function(_, r) reject = r end)\r\n\t\t\t})\r\n\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\treject()\r\n\t\t\texpect(p:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(p._values[1][1]).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(p._values[1][2]).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(p._values[1][3]).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(p._values[1][4]).to.equal(Promise.Status.Rejected)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel promises if it is cancelled\", function()\r\n\t\t\tlocal p = Promise.new(function() end)\r\n\t\t\tp:andThen(function() end)\r\n\r\n\t\t\tlocal promises = {\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tPromise.new(function() end),\r\n\t\t\t\tp\r\n\t\t\t}\r\n\r\n\t\t\tPromise.allSettled(promises):cancel()\r\n\r\n\t\t\texpect(promises[1]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[2]:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(promises[3]:getStatus()).to.equal(Promise.Status.Started)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:await\", function()\r\n\t\tit(\"should return the correct values\", function()\r\n\t\t\tlocal promise = Promise.resolve(5, 6, nil, 7)\r\n\r\n\t\t\tlocal a, b, c, d, e = promise:await()\r\n\r\n\t\t\texpect(a).to.equal(true)\r\n\t\t\texpect(b).to.equal(5)\r\n\t\t\texpect(c).to.equal(6)\r\n\t\t\texpect(d).to.equal(nil)\r\n\t\t\texpect(e).to.equal(7)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:expect\", function()\r\n\t\tit(\"should throw the correct values\", function()\r\n\t\t\tlocal rejectionValue = {}\r\n\t\t\tlocal promise = Promise.reject(rejectionValue)\r\n\r\n\t\t\tlocal success, value = pcall(function()\r\n\t\t\t\tpromise:expect()\r\n\t\t\tend)\r\n\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(value).to.equal(rejectionValue)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise:now\", function()\r\n\t\tit(\"should resolve if the Promise is resolved\", function()\r\n\t\t\tlocal success, value = Promise.resolve(\"foo\"):now():_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(true)\r\n\t\t\texpect(value).to.equal(\"foo\")\r\n\t\tend)\r\n\r\n\t\tit(\"should reject if the Promise is not resolved\", function()\r\n\t\t\tlocal success, value = Promise.new(function() end):now():_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(Promise.Error.isKind(value, \"NotResolvedInTime\")).to.equal(true)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject with a custom rejection value\", function()\r\n\t\t\tlocal success, value = Promise.new(function() end):now(\"foo\"):_unwrap()\r\n\r\n\t\t\texpect(success).to.equal(false)\r\n\t\t\texpect(value).to.equal(\"foo\")\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.each\", function()\r\n\t\tit(\"should iterate\", function()\r\n\t\t\tlocal ok, result = Promise.each({\r\n\t\t\t\t\"foo\", \"bar\", \"baz\", \"qux\"\r\n\t\t\t}, function(...)\r\n\t\t\t\treturn {...}\r\n\t\t\tend):_unwrap()\r\n\r\n\t\t\texpect(ok).to.equal(true)\r\n\t\t\texpect(result[1][1]).to.equal(\"foo\")\r\n\t\t\texpect(result[1][2]).to.equal(1)\r\n\t\t\texpect(result[2][1]).to.equal(\"bar\")\r\n\t\t\texpect(result[2][2]).to.equal(2)\r\n\t\t\texpect(result[3][1]).to.equal(\"baz\")\r\n\t\t\texpect(result[3][2]).to.equal(3)\r\n\t\t\texpect(result[4][1]).to.equal(\"qux\")\r\n\t\t\texpect(result[4][2]).to.equal(4)\r\n\t\tend)\r\n\r\n\t\tit(\"should iterate serially\", function()\r\n\t\t\tlocal resolves = {}\r\n\t\t\tlocal callCounts = {}\r\n\r\n\t\t\tlocal promise = Promise.each({\r\n\t\t\t\t\"foo\", \"bar\", \"baz\"\r\n\t\t\t}, function(value, index)\r\n\t\t\t\tcallCounts[index] = (callCounts[index] or 0) + 1\r\n\r\n\t\t\t\treturn Promise.new(function(resolve)\r\n\t\t\t\t\ttable.insert(resolves, function()\r\n\t\t\t\t\t\tresolve(value:upper())\r\n\t\t\t\t\tend)\r\n\t\t\t\tend)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(#resolves).to.equal(1)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.never.be.ok()\r\n\r\n\t\t\ttable.remove(resolves, 1)()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(#resolves).to.equal(1)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.equal(1)\r\n\t\t\texpect(callCounts[3]).to.never.be.ok()\r\n\r\n\t\t\ttable.remove(resolves, 1)()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.equal(1)\r\n\t\t\texpect(callCounts[3]).to.equal(1)\r\n\r\n\t\t\ttable.remove(resolves, 1)()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(type(promise._values[1])).to.equal(\"table\")\r\n\t\t\texpect(type(promise._values[2])).to.equal(\"nil\")\r\n\r\n\t\t\tlocal result = promise._values[1]\r\n\r\n\t\t\texpect(result[1]).to.equal(\"FOO\")\r\n\t\t\texpect(result[2]).to.equal(\"BAR\")\r\n\t\t\texpect(result[3]).to.equal(\"BAZ\")\r\n\t\tend)\r\n\r\n\t\tit(\"should reject with the value if the predicate promise rejects\", function()\r\n\t\t\tlocal promise = Promise.each({1, 2, 3}, function()\r\n\t\t\t\treturn Promise.reject(\"foobar\")\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(\"foobar\")\r\n\t\tend)\r\n\r\n\t\tit(\"should allow Promises to be in the list and wait when it gets to them\", function()\r\n\t\t\tlocal innerResolve\r\n\t\t\tlocal innerPromise = Promise.new(function(resolve)\r\n\t\t\t\tinnerResolve = resolve\r\n\t\t\tend)\r\n\r\n\t\t\tlocal promise = Promise.each({\r\n\t\t\t\tinnerPromise\r\n\t\t\t}, function(value)\r\n\t\t\t\treturn value * 2\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tinnerResolve(2)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1][1]).to.equal(4)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject with the value if a Promise from the list rejects\", function()\r\n\t\t\tlocal called = false\r\n\t\t\tlocal promise = Promise.each({1, 2, Promise.reject(\"foobar\")}, function(value)\r\n\t\t\t\tcalled = true\r\n\t\t\t\treturn \"never\"\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(\"foobar\")\r\n\t\t\texpect(called).to.equal(false)\r\n\t\tend)\r\n\r\n\t\tit(\"should reject immediately if there's a cancelled Promise in the list initially\", function()\r\n\t\t\tlocal cancelled = Promise.new(function() end)\r\n\t\t\tcancelled:cancel()\r\n\r\n\t\t\tlocal called = false\r\n\t\t\tlocal promise = Promise.each({1, 2, cancelled}, function()\r\n\t\t\t\tcalled = true\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(called).to.equal(false)\r\n\t\t\texpect(promise._values[1].kind).to.equal(Promise.Error.Kind.AlreadyCancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should stop iteration if Promise.each is cancelled\", function()\r\n\t\t\tlocal callCounts = {}\r\n\r\n\t\t\tlocal promise = Promise.each({\r\n\t\t\t\t\"foo\", \"bar\", \"baz\"\r\n\t\t\t}, function(value, index)\r\n\t\t\t\tcallCounts[index] = (callCounts[index] or 0) + 1\r\n\r\n\t\t\t\treturn Promise.new(function()\r\n\r\n\t\t\t\tend)\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.never.be.ok()\r\n\r\n\t\t\tpromise:cancel()\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\t\texpect(callCounts[1]).to.equal(1)\r\n\t\t\texpect(callCounts[2]).to.never.be.ok()\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel the Promise returned from the predicate if Promise.each is cancelled\", function()\r\n\t\t\tlocal innerPromise\r\n\r\n\t\t\tlocal promise = Promise.each({\r\n\t\t\t\t\"foo\", \"bar\", \"baz\"\r\n\t\t\t}, function(value, index)\r\n\t\t\t\tinnerPromise = Promise.new(function()\r\n\t\t\t\tend)\r\n\t\t\t\treturn innerPromise\r\n\t\t\tend)\r\n\r\n\t\t\tpromise:cancel()\r\n\r\n\t\t\texpect(innerPromise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\r\n\t\tit(\"should cancel Promises in the list if Promise.each is cancelled\", function()\r\n\t\t\tlocal innerPromise = Promise.new(function() end)\r\n\r\n\t\t\tlocal promise = Promise.each({innerPromise}, function() end)\r\n\r\n\t\t\tpromise:cancel()\r\n\r\n\t\t\texpect(innerPromise:getStatus()).to.equal(Promise.Status.Cancelled)\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.retry\", function()\r\n\t\tit(\"should retry N times\", function()\r\n\t\t\tlocal counter = 0\r\n\r\n\t\t\tlocal promise = Promise.retry(function(parameter)\r\n\t\t\t\texpect(parameter).to.equal(\"foo\")\r\n\r\n\t\t\t\tcounter = counter + 1\r\n\r\n\t\t\t\tif counter == 5 then\r\n\t\t\t\t\treturn Promise.resolve(\"ok\")\r\n\t\t\t\tend\r\n\r\n\t\t\t\treturn Promise.reject(\"fail\")\r\n\t\t\tend, 5, \"foo\")\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(\"ok\")\r\n\t\tend)\r\n\r\n\t\tit(\"should reject if threshold is exceeded\", function()\r\n\t\t\tlocal promise = Promise.retry(function()\r\n\t\t\t\treturn Promise.reject(\"fail\")\r\n\t\t\tend, 5)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Rejected)\r\n\t\t\texpect(promise._values[1]).to.equal(\"fail\")\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.fromEvent\", function()\r\n\t\tit(\"should convert a Promise into an event\", function()\r\n\t\t\tlocal event = Instance.new(\"BindableEvent\")\r\n\r\n\t\t\tlocal promise = Promise.fromEvent(event.Event)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tevent:Fire(\"foo\")\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(\"foo\")\r\n\t\tend)\r\n\r\n\t\tit(\"should convert a Promise into an event with the predicate\", function()\r\n\t\t\tlocal event = Instance.new(\"BindableEvent\")\r\n\r\n\t\t\tlocal promise = Promise.fromEvent(event.Event, function(param)\r\n\t\t\t\treturn param == \"foo\"\r\n\t\t\tend)\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tevent:Fire(\"bar\")\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Started)\r\n\r\n\t\t\tevent:Fire(\"foo\")\r\n\r\n\t\t\texpect(promise:getStatus()).to.equal(Promise.Status.Resolved)\r\n\t\t\texpect(promise._values[1]).to.equal(\"foo\")\r\n\t\tend)\r\n\tend)\r\n\r\n\tdescribe(\"Promise.is\", function()\r\n\t\tit(\"should work with current version\", function()\r\n\t\t\tlocal promise = Promise.resolve(1)\r\n\r\n\t\t\texpect(Promise.is(promise)).to.equal(true)\r\n\t\tend)\r\n\r\n\t\tit(\"should work with any object with an andThen\", function()\r\n\t\t\tlocal obj = {\r\n\t\t\t\tandThen = function()\r\n\t\t\t\t\treturn 1\r\n\t\t\t\tend\r\n\t\t\t}\r\n\r\n\t\t\texpect(Promise.is(obj)).to.equal(true)\r\n\t\tend)\r\n\r\n\t\tit(\"should work with older promises\", function()\r\n\t\t\tlocal OldPromise = {}\r\n\t\t\tOldPromise.prototype = {}\r\n\t\t\tOldPromise.__index = OldPromise.prototype\r\n\r\n\t\t\tfunction OldPromise.prototype:andThen()\r\n\r\n\t\t\tend\r\n\r\n\t\t\tlocal oldPromise = setmetatable({}, OldPromise)\r\n\r\n\t\t\texpect(Promise.is(oldPromise)).to.equal(true)\r\n\t\tend)\r\n\tend)\r\nend\r\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"8d7217c7f2aaf98a45b764cd6f5e70a3":{"Id":"8d7217c7f2aaf98a45b764cd6f5e70a3","Parent":"ee222f38fa8be78c47f18fd875ac7854","Name":"Promise","ClassName":"ModuleScript","Properties":{"Source":{"String":"return require(script.Parent._Index[\"evaera_promise@3.1.0\"][\"promise\"])\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"5d73467a1d588843ea200ceeebce3eb5":{"Id":"5d73467a1d588843ea200ceeebce3eb5","Parent":"372383b65caa3b15b65ef42feec874b8","Name":"Workspace","ClassName":"Workspace","Properties":{"FilteringEnabled":{"Bool":true}},"Children":["1a31bb8458eefe0db2d00eab15f6b14f"],"Metadata":{"ignoreUnknownInstances":true}},"3b4376cbee89fe33103b0e674597c0ea":{"Id":"3b4376cbee89fe33103b0e674597c0ea","Parent":"aa5772ae3a91cb8b93b724d7c5a15190","Name":"promiseAwaitValue","ClassName":"ModuleScript","Properties":{"Source":{"String":"local ReplicatedStorage: ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\n\nlocal Packages: Folder = ReplicatedStorage:WaitForChild(\"Packages\") :: Folder\nlocal Promise = require(Packages:WaitForChild(\"Promise\"))\n\nlocal function promiseAwaitForValue(value: string, list: { [string]: any }): any\n\tlocal conn: RBXScriptConnection\n\tlocal promise = Promise.new(function(resolve, _, onCancel)\n\t\tconn = RunService.Heartbeat:Connect(function()\n\t\t\tlocal _context = list[value]\n\t\t\tif _context then\n\t\t\t\tresolve(_context)\n\t\t\tend\n\t\tend)\n\t\tonCancel(function()\n\t\t\tconn:Disconnect()\n\t\tend)\n\tend):finally(function()\n\t\tconn:Disconnect()\n\tend)\n\n\treturn promise\nend\n\nreturn promiseAwaitForValue\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"b006666de7a034699290c8f7a42446bf":{"Id":"b006666de7a034699290c8f7a42446bf","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Subscription","ClassName":"ModuleScript","Properties":{"Source":{"String":"local types = require(script.Parent.Types)\r\nlocal t = require(script.Parent.Parent.t)\r\n\r\nexport type ISubscription = types.ISubscription\r\n\r\nlocal Subscription: ISubscription\r\nSubscription.__index = Subscription\r\n\r\nfunction Subscription.new(context: string, action: string, callback: () -> ()?): ISubscription\r\n\r\n\tlocal self: ISubscription\r\n\tself.Context = context,\r\n\tself.Action = action,\r\n\tself.Callback = callback\r\n\r\n\treturn setmetatable(self, Subscription) :: ISubscription\r\nend\r\n\r\nfunction Subscription.is(obj: any): boolean\r\n\treturn types.isSubscription(obj)\r\nend\r\n\r\nfunction Subscription:Subscribe(callback: () -> nil): ISubscription\r\n\treturn self\r\nend\r\n\r\nreturn Subscription"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"c7c89a6fc94431da37e9bff85b81ab47":{"Id":"c7c89a6fc94431da37e9bff85b81ab47","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"IWormhole","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\r\n\r\nlocal ContextBlock: (obj: any) -> boolean = require(script.Parent.ContextBlock)\r\nlocal ISubscription: (obj: any) -> boolean = require(script.Parent.ISubscription)\r\nlocal IContext: (obj: any) -> boolean = require(script.Parent.IContext)\r\n\r\ntype ContextBlock = ContextBlock.ContextBlock\r\ntype ISubscription = ISubscription.ISubscription\r\ntype IContext = IContext.IContext\r\n\r\nlocal isWormhole: (obj: any) -> boolean = t.interface({\r\n\t_Storage = t.instanceIsA(\"Folder\"),\r\n\t_Contexts = t.map(t.string, t.any)\r\n})\r\n\r\nexport type IWormhole = {\r\n\t_Storage: Folder,\r\n\t_Contexts: {[string]: ContextBlock},\r\n\r\n\t__index: IWormhole,\r\n\r\n\tnew: (wormhole: IWormhole) -> IWormhole,\r\n\tis: (obj: any) -> boolean,\r\n\r\n\tawaitContext: (wormhole: IWormhole, context: string, timeout: number?) -> ContextBlock,\r\n\taddContext: (wormhole: IWormhole, context: string) -> ContextBlock,\r\n\tmakeSubscription: (wormhole: IWormhole, context: string, action: string) ->ISubscription,\r\n\tdoSubscribe: (wormhole: IWormhole, subscription: ISubscription, callback: () -> nil?) -> ()\r\n}\r\n\r\nreturn function(obj)\r\n\treturn isWormhole(obj) :: boolean\r\nend"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"aa5772ae3a91cb8b93b724d7c5a15190":{"Id":"aa5772ae3a91cb8b93b724d7c5a15190","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Promises","ClassName":"Folder","Properties":{},"Children":["3b4376cbee89fe33103b0e674597c0ea"],"Metadata":{"ignoreUnknownInstances":false}},"9c8522e307357cb958492ee98fd93042":{"Id":"9c8522e307357cb958492ee98fd93042","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"IPackage","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\n\nlocal function isDateTime(value: any): (boolean, string?)\n\tlocal valueType = typeof(value)\n\tif valueType == \"DateTime\" then\n\t\treturn true\n\telse\n\t\treturn false, string.format(\"DateTime expected, got %s\", valueType)\n\tend\nend\n\nlocal isPackage: (obj: any) -> boolean = t.interface({\n\tContext = t.string,\n\tAction = t.string,\n\tDateTime = isDateTime,\n\tPayload = t.map(t.string, t.any),\n})\n\nexport type IPackage = {\n\tContext: string,\n\tAction: string,\n\tTimestamp: DateTime,\n\tPayload: { [string]: any },\n}\n\nreturn function(obj: any): boolean\n\treturn isPackage(obj)\nend\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"2d5696ee5bdf4c8a0a542bf58f63b738":{"Id":"2d5696ee5bdf4c8a0a542bf58f63b738","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Context","ClassName":"ModuleScript","Properties":{"Source":{"String":"local types = require(script.Parent.Types)\nlocal t = require(script.Parent.Parent.t)\n\nexport type IContext = types.IContext\n\ntype IWormhole = types.IWormhole\n\nlocal Context: IContext\nContext.__index = Context\n\nfunction Context.new(context: string, wormhole: IWormhole): IContext\n\tlocal check = t.strict(t.string)\n\tcheck(context)\n\n\tlocal self: IContext\n\tself.Name = context\n\tself.Subscriptions = {}\n\n\treturn setmetatable(self, Context) :: IContext\nend\n\nfunction Context.is(obj: any): boolean\n\treturn types.isContext(obj)\nend\n\nfunction Context:Publish(action: string, data: any) end\n\nfunction Context:Subscribe(action: string, callback: () -> ()) end\n\nfunction Context:Destroy() end\n\nreturn Context\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"bc7710f6aad3249798ac01ac70c608b3":{"Id":"bc7710f6aad3249798ac01ac70c608b3","Parent":"372383b65caa3b15b65ef42feec874b8","Name":"Lighting","ClassName":"Lighting","Properties":{"Brightness":{"Float32":2.0},"Ambient":{"Color3":[0.0,0.0,0.0]},"GlobalShadows":{"Bool":true},"Outlines":{"Bool":false},"Technology":{"Enum":1}},"Children":[],"Metadata":{"ignoreUnknownInstances":true}},"d22adc3a9bd7195dae4e3c4ea2612c09":{"Id":"d22adc3a9bd7195dae4e3c4ea2612c09","Parent":"c39e26776de082e6222fc839fa8b1b48","Name":"init.spec","ClassName":"ModuleScript","Properties":{"Source":{"String":"return function()\r\n\tlocal t = require(script.Parent)\r\n\r\n\tit(\"should support basic types\", function()\r\n\t\tassert(t.any(\"\"))\r\n\t\tassert(t.boolean(true))\r\n\t\tassert(t.none(nil))\r\n\t\tassert(t.number(1))\r\n\t\tassert(t.string(\"foo\"))\r\n\t\tassert(t.table({}))\r\n\r\n\t\tassert(not (t.any(nil)))\r\n\t\tassert(not (t.boolean(\"true\")))\r\n\t\tassert(not (t.none(1)))\r\n\t\tassert(not (t.number(true)))\r\n\t\tassert(not (t.string(true)))\r\n\t\tassert(not (t.table(82)))\r\n\tend)\r\n\r\n\tit(\"should support special number types\", function()\r\n\t\tlocal maxTen = t.numberMax(10)\r\n\t\tlocal minTwo = t.numberMin(2)\r\n\t\tlocal maxTenEx = t.numberMaxExclusive(10)\r\n\t\tlocal minTwoEx = t.numberMinExclusive(2)\r\n\t\tlocal constrainedEightToEleven = t.numberConstrained(8, 11)\r\n\t\tlocal constrainedEightToElevenEx = t.numberConstrainedExclusive(8, 11)\r\n\r\n\t\tassert(maxTen(5))\r\n\t\tassert(maxTen(10))\r\n\t\tassert(not (maxTen(11)))\r\n\t\tassert(not (maxTen()))\r\n\r\n\t\tassert(minTwo(5))\r\n\t\tassert(minTwo(2))\r\n\t\tassert(not (minTwo(1)))\r\n\t\tassert(not (minTwo()))\r\n\r\n\t\tassert(maxTenEx(5))\r\n\t\tassert(maxTenEx(9))\r\n\t\tassert(not (maxTenEx(10)))\r\n\t\tassert(not (maxTenEx()))\r\n\r\n\t\tassert(minTwoEx(5))\r\n\t\tassert(minTwoEx(3))\r\n\t\tassert(not (minTwoEx(2)))\r\n\t\tassert(not (minTwoEx()))\r\n\r\n\t\tassert(not (constrainedEightToEleven(7)))\r\n\t\tassert(constrainedEightToEleven(8))\r\n\t\tassert(constrainedEightToEleven(9))\r\n\t\tassert(constrainedEightToEleven(11))\r\n\t\tassert(not (constrainedEightToEleven(12)))\r\n\t\tassert(not (constrainedEightToEleven()))\r\n\r\n\t\tassert(not (constrainedEightToElevenEx(7)))\r\n\t\tassert(not (constrainedEightToElevenEx(8)))\r\n\t\tassert(constrainedEightToElevenEx(9))\r\n\t\tassert(not (constrainedEightToElevenEx(11)))\r\n\t\tassert(not (constrainedEightToElevenEx(12)))\r\n\t\tassert(not (constrainedEightToElevenEx()))\r\n\tend)\r\n\r\n\tit(\"should support optional types\", function()\r\n\t\tlocal check = t.optional(t.string)\r\n\t\tassert(check(\"\"))\r\n\t\tassert(check())\r\n\t\tassert(not (check(1)))\r\n\tend)\r\n\r\n\tit(\"should support tuple types\", function()\r\n\t\tlocal myTupleCheck = t.tuple(t.number, t.string, t.optional(t.number))\r\n\t\tassert(myTupleCheck(1, \"2\", 3))\r\n\t\tassert(myTupleCheck(1, \"2\"))\r\n\t\tassert(not (myTupleCheck(1, \"2\", \"3\")))\r\n\tend)\r\n\r\n\tit(\"should support union types\", function()\r\n\t\tlocal numberOrString = t.union(t.number, t.string)\r\n\t\tassert(numberOrString(1))\r\n\t\tassert(numberOrString(\"1\"))\r\n\t\tassert(not (numberOrString(nil)))\r\n\tend)\r\n\r\n\tit(\"should support literal types\", function()\r\n\t\tlocal checkSingle = t.literal(\"foo\")\r\n\t\tlocal checkUnion = t.union(t.literal(\"foo\"), t.literal(\"bar\"), t.literal(\"oof\"))\r\n\r\n\t\tassert(checkSingle(\"foo\"))\r\n\t\tassert(checkUnion(\"foo\"))\r\n\t\tassert(checkUnion(\"bar\"))\r\n\t\tassert(checkUnion(\"oof\"))\r\n\r\n\t\tassert(not (checkSingle(\"FOO\")))\r\n\t\tassert(not (checkUnion(\"FOO\")))\r\n\t\tassert(not (checkUnion(\"BAR\")))\r\n\t\tassert(not (checkUnion(\"OOF\")))\r\n\tend)\r\n\r\n\tit(\"should support multiple literal types\", function()\r\n\t\tlocal checkSingle = t.literal(\"foo\")\r\n\t\tlocal checkUnion = t.literal(\"foo\", \"bar\", \"oof\")\r\n\r\n\t\tassert(checkSingle(\"foo\"))\r\n\t\tassert(checkUnion(\"foo\"))\r\n\t\tassert(checkUnion(\"bar\"))\r\n\t\tassert(checkUnion(\"oof\"))\r\n\r\n\t\tassert(not (checkSingle(\"FOO\")))\r\n\t\tassert(not (checkUnion(\"FOO\")))\r\n\t\tassert(not (checkUnion(\"BAR\")))\r\n\t\tassert(not (checkUnion(\"OOF\")))\r\n\tend)\r\n\r\n\tit(\"should support intersection types\", function()\r\n\t\tlocal integerMax5000 = t.intersection(t.integer, t.numberMax(5000))\r\n\t\tassert(integerMax5000(1))\r\n\t\tassert(not (integerMax5000(5001)))\r\n\t\tassert(not (integerMax5000(1.1)))\r\n\t\tassert(not (integerMax5000(\"1\")))\r\n\tend)\r\n\r\n\tdescribe(\"array\", function()\r\n\t\tit(\"should support array types\", function()\r\n\t\t\tlocal stringArray = t.array(t.string)\r\n\t\t\tlocal anyArray = t.array(t.any)\r\n\t\t\tlocal stringValues = t.values(t.string)\r\n\t\t\tassert(not (anyArray(\"foo\")))\r\n\t\t\tassert(anyArray({1, \"2\", 3}))\r\n\t\t\tassert(not (stringArray({1, \"2\", 3})))\r\n\t\t\tassert(not (stringArray()))\r\n\t\t\tassert(not (stringValues()))\r\n\t\t\tassert(anyArray({\"1\", \"2\", \"3\"}, t.string))\r\n\t\t\tassert(not (anyArray({\r\n\t\t\t\tfoo = \"bar\"\r\n\t\t\t})))\r\n\t\t\tassert(not (anyArray({\r\n\t\t\t\t[1] = \"non\",\r\n\t\t\t\t[5] = \"sequential\"\r\n\t\t\t})))\r\n\t\tend)\r\n\r\n\t\tit(\"should not be fooled by sparse arrays\", function()\r\n\t\t\tlocal anyArray = t.array(t.any)\r\n\r\n\t\t\tassert(not (anyArray({\r\n\t\t\t\t[1] = 1,\r\n\t\t\t\t[2] = 2,\r\n\t\t\t\t[4] = 4,\r\n\t\t\t})))\r\n\t\tend)\r\n\tend)\r\n\r\n\tit(\"should support map types\", function()\r\n\t\tlocal stringNumberMap = t.map(t.string, t.number)\r\n\t\tassert(stringNumberMap({}))\r\n\t\tassert(stringNumberMap({a = 1}))\r\n\t\tassert(not (stringNumberMap({[1] = \"a\"})))\r\n\t\tassert(not (stringNumberMap({a = \"a\"})))\r\n\t\tassert(not (stringNumberMap()))\r\n\tend)\r\n\r\n\tit(\"should support set types\", function()\r\n\t\tlocal stringSet = t.set(t.string)\r\n\t\tassert(stringSet({}))\r\n\t\tassert(stringSet({a = true}))\r\n\t\tassert(not (stringSet({[1] = \"a\"})))\r\n\t\tassert(not (stringSet({a = \"a\"})))\r\n\t\tassert(not (stringSet({a = false})))\r\n\t\tassert(not (stringSet()))\r\n\tend)\r\n\r\n\tit(\"should support interface types\", function()\r\n\t\tlocal IVector3 = t.interface({\r\n\t\t\tx = t.number,\r\n\t\t\ty = t.number,\r\n\t\t\tz = t.number,\r\n\t\t})\r\n\r\n\t\tassert(IVector3({\r\n\t\t\tw = 0,\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t\tz = 3,\r\n\t\t}))\r\n\r\n\t\tassert(not (IVector3({\r\n\t\t\tw = 0,\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t})))\r\n\tend)\r\n\r\n\tit(\"should support strict interface types\", function()\r\n\t\tlocal IVector3 = t.strictInterface({\r\n\t\t\tx = t.number,\r\n\t\t\ty = t.number,\r\n\t\t\tz = t.number,\r\n\t\t})\r\n\r\n\t\tassert(not (IVector3(0)))\r\n\r\n\t\tassert(not (IVector3({\r\n\t\t\tw = 0,\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t\tz = 3,\r\n\t\t})))\r\n\r\n\t\tassert(not (IVector3({\r\n\t\t\tw = 0,\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t})))\r\n\r\n\t\tassert(IVector3({\r\n\t\t\tx = 1,\r\n\t\t\ty = 2,\r\n\t\t\tz = 3,\r\n\t\t}))\r\n\tend)\r\n\r\n\tit(\"should support deep interface types\", function()\r\n\t\tlocal IPlayer = t.interface({\r\n\t\t\tname = t.string,\r\n\t\t\tinventory = t.interface({\r\n\t\t\t\tsize = t.number\r\n\t\t\t})\r\n\t\t})\r\n\r\n\t\tassert(IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t\tinventory = {\r\n\t\t\t\tsize = 1\r\n\t\t\t}\r\n\t\t}))\r\n\r\n\t\tassert(not (IPlayer({\r\n\t\t\tinventory = {\r\n\t\t\t\tsize = 1\r\n\t\t\t}\r\n\t\t})))\r\n\r\n\t\tassert(not (IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t\tinventory = {\r\n\t\t\t}\r\n\t\t})))\r\n\r\n\t\tassert(not (IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t})))\r\n\tend)\r\n\r\n\tit(\"should support deep optional interface types\", function()\r\n\t\tlocal IPlayer = t.interface({\r\n\t\t\tname = t.string,\r\n\t\t\tinventory = t.optional(t.interface({\r\n\t\t\t\tsize = t.number\r\n\t\t\t}))\r\n\t\t})\r\n\r\n\t\tassert(IPlayer({\r\n\t\t\tname = \"TestPlayer\"\r\n\t\t}))\r\n\r\n\t\tassert(not (IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t\tinventory = {\r\n\t\t\t}\r\n\t\t})))\r\n\r\n\t\tassert(IPlayer({\r\n\t\t\tname = \"TestPlayer\",\r\n\t\t\tinventory = {\r\n\t\t\t\tsize = 1\r\n\t\t\t}\r\n\t\t}))\r\n\tend)\r\n\r\n\tit(\"should support Roblox Instance types\", function()\r\n\t\tlocal stringValueCheck = t.instanceOf(\"StringValue\")\r\n\t\tlocal stringValue = Instance.new(\"StringValue\")\r\n\t\tlocal boolValue = Instance.new(\"BoolValue\")\r\n\r\n\t\tassert(stringValueCheck(stringValue))\r\n\t\tassert(not (stringValueCheck(boolValue)))\r\n\t\tassert(not (stringValueCheck()))\r\n\tend)\r\n\r\n\tit(\"should support Roblox Instance types inheritance\", function()\r\n\t\tlocal guiObjectCheck = t.instanceIsA(\"GuiObject\")\r\n\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\tlocal textLabel = Instance.new(\"TextLabel\")\r\n\t\tlocal stringValue = Instance.new(\"StringValue\")\r\n\r\n\t\tassert(guiObjectCheck(frame))\r\n\t\tassert(guiObjectCheck(textLabel))\r\n\t\tassert(not (guiObjectCheck(stringValue)))\r\n\t\tassert(not (guiObjectCheck()))\r\n\tend)\r\n\r\n\tit(\"should support Roblox Enum types\", function()\r\n\t\tlocal sortOrderEnumCheck = t.enum(Enum.SortOrder)\r\n\t\tassert(t.Enum(Enum.SortOrder))\r\n\t\tassert(not (t.Enum(\"Enum.SortOrder\")))\r\n\r\n\t\tassert(t.EnumItem(Enum.SortOrder.Name))\r\n\t\tassert(not (t.EnumItem(\"Enum.SortOrder.Name\")))\r\n\r\n\t\tassert(sortOrderEnumCheck(Enum.SortOrder.Name))\r\n\t\tassert(sortOrderEnumCheck(Enum.SortOrder.Custom))\r\n\t\tassert(not (sortOrderEnumCheck(Enum.EasingStyle.Linear)))\r\n\t\tassert(not (sortOrderEnumCheck()))\r\n\tend)\r\n\r\n\tit(\"should support Roblox RBXScriptSignal\", function()\r\n\t\tassert(t.RBXScriptSignal(game.ChildAdded))\r\n\t\tassert(not (t.RBXScriptSignal(nil)))\r\n\t\tassert(not (t.RBXScriptSignal(Vector3.new())))\r\n\tend)\r\n\r\n\t-- TODO: Add this back when Lemur supports it\r\n\t-- it(\"should support Roblox RBXScriptConnection\", function()\r\n\t-- \tlocal conn = game.ChildAdded:Connect(function() end)\r\n\t-- \tassert(t.RBXScriptConnection(conn))\r\n\t-- \tassert(not (t.RBXScriptConnection(nil)))\r\n\t-- \tassert(not (t.RBXScriptConnection(Vector3.new())))\r\n\t-- end)\r\n\r\n\tit(\"should support wrapping function types\", function()\r\n\t\tlocal checkFoo = t.tuple(t.string, t.number, t.optional(t.string))\r\n\t\tlocal foo = t.wrap(function(a, b, c)\r\n\t\t\tlocal result = string.format(\"%s %d\", a, b)\r\n\t\t\tif c then\r\n\t\t\t\tresult = result .. \" \" .. c\r\n\t\t\tend\r\n\t\t\treturn result\r\n\t\tend, checkFoo)\r\n\r\n\t\tassert(not (pcall(foo)))\r\n\t\tassert(not (pcall(foo, \"a\")))\r\n\t\tassert(not (pcall(foo, 2)))\r\n\t\tassert(pcall(foo, \"a\", 1))\r\n\t\tassert(pcall(foo, \"a\", 1, \"b\"))\r\n\tend)\r\n\r\n\tit(\"should support strict types\", function()\r\n\t\tlocal myType = t.strict(t.tuple(t.string, t.number))\r\n\t\tassert(not (pcall(function()\r\n\t\t\tmyType(\"a\", \"b\")\r\n\t\tend)))\r\n\t\tassert(pcall(function()\r\n\t\t\tmyType(\"a\", 1)\r\n\t\tend))\r\n\tend)\r\n\r\n\tit(\"should support common OOP types\", function()\r\n\t\tlocal MyClass = {}\r\n\t\tMyClass.__index = MyClass\r\n\r\n\t\tfunction MyClass.new()\r\n\t\t\tlocal self = setmetatable({}, MyClass)\r\n\t\t\treturn self\r\n\t\tend\r\n\r\n\t\tlocal function instanceOfClass(class)\r\n\t\t\treturn function(value)\r\n\t\t\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\t\t\tif not tableSuccess then\r\n\t\t\t\t\treturn false, tableErrMsg or \"\"\r\n\t\t\t\tend\r\n\r\n\t\t\t\tlocal mt = getmetatable(value)\r\n\t\t\t\tif not mt or mt.__index ~= class then\r\n\t\t\t\t\treturn false, \"bad member of class\"\r\n\t\t\t\tend\r\n\r\n\t\t\t\treturn true\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tlocal instanceOfMyClass = instanceOfClass(MyClass)\r\n\r\n\t\tlocal myObject = MyClass.new()\r\n\t\tassert(instanceOfMyClass(myObject))\r\n\t\tassert(not (instanceOfMyClass({})))\r\n\t\tassert(not (instanceOfMyClass()))\r\n\tend)\r\n\r\n\tit(\"should not treat NaN as numbers\", function()\r\n\t\tassert(t.number(1))\r\n\t\tassert(not (t.number(0/0)))\r\n\t\tassert(not (t.number(\"1\")))\r\n\tend)\r\n\r\n\tit(\"should not treat numbers as NaN\", function()\r\n\t\tassert(not (t.nan(1)))\r\n\t\tassert(t.nan(0/0))\r\n\t\tassert(not (t.nan(\"1\")))\r\n\tend)\r\n\r\n\tit(\"should allow union of number and NaN\", function()\r\n\t\tlocal numberOrNaN = t.union(t.number, t.nan)\r\n\t\tassert(numberOrNaN(1))\r\n\t\tassert(numberOrNaN(0/0))\r\n\t\tassert(not (numberOrNaN(\"1\")))\r\n\tend)\r\n\r\n\tit(\"should support non-string keys for interfaces\", function()\r\n\t\tlocal key = {}\r\n\t\tlocal myInterface = t.interface({ [key] = t.number })\r\n\t\tassert(myInterface({ [key] = 1 }))\r\n\t\tassert(not (myInterface({ [key] = \"1\" })))\r\n\tend)\r\n\r\n\tit(\"should support failing on non-string keys for strict interfaces\", function()\r\n\t\tlocal myInterface = t.strictInterface({ a = t.number })\r\n\t\tassert(not (myInterface({ a = 1, [{}] = 2 })))\r\n\tend)\r\n\r\n\tit(\"should support children\", function()\r\n\t\tlocal myInterface = t.interface({\r\n\t\t\tbuttonInFrame = t.intersection(t.instanceOf(\"Frame\"), t.children({\r\n\t\t\t\tMyButton = t.instanceOf(\"ImageButton\")\r\n\t\t\t}))\r\n\t\t})\r\n\r\n\t\tassert(not (t.children({})(5)))\r\n\t\tassert(not (myInterface({ buttonInFrame = Instance.new(\"Frame\") })))\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(myInterface({ buttonInFrame = frame }))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"NotMyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"TextButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button1 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton1.Name = \"MyButton\"\r\n\t\t\tlocal button2 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton2.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\tend)\r\n\r\n\tit(\"should support t.instanceOf shorthand\", function()\r\n\t\tlocal myInterface = t.interface({\r\n\t\t\tbuttonInFrame = t.instanceOf(\"Frame\", {\r\n\t\t\t\tMyButton = t.instanceOf(\"ImageButton\")\r\n\t\t\t})\r\n\t\t})\r\n\r\n\t\tassert(not (t.children({})(5)))\r\n\t\tassert(not (myInterface({ buttonInFrame = Instance.new(\"Frame\") })))\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(myInterface({ buttonInFrame = frame }))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"NotMyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"TextButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button1 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton1.Name = \"MyButton\"\r\n\t\t\tlocal button2 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton2.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\tend)\r\n\r\n\tit(\"should support t.instanceIsA shorthand\", function()\r\n\t\tlocal myInterface = t.interface({\r\n\t\t\tbuttonInFrame = t.instanceIsA(\"Frame\", {\r\n\t\t\t\tMyButton = t.instanceIsA(\"ImageButton\")\r\n\t\t\t})\r\n\t\t})\r\n\r\n\t\tassert(not (t.children({})(5)))\r\n\t\tassert(not (myInterface({ buttonInFrame = Instance.new(\"Frame\") })))\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(myInterface({ buttonInFrame = frame }))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton.Name = \"NotMyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button = Instance.new(\"TextButton\", frame)\r\n\t\t\tbutton.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\r\n\t\tdo\r\n\t\t\tlocal frame = Instance.new(\"Frame\")\r\n\t\t\tlocal button1 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton1.Name = \"MyButton\"\r\n\t\t\tlocal button2 = Instance.new(\"ImageButton\", frame)\r\n\t\t\tbutton2.Name = \"MyButton\"\r\n\t\t\tassert(not (myInterface({ buttonInFrame = frame })))\r\n\t\tend\r\n\tend)\r\n\r\n\tit(\"should support t.match\", function()\r\n\t\tlocal check = t.match(\"%d+\")\r\n\t\tassert(check(\"123\"))\r\n\t\tassert(not (check(\"abc\")))\r\n\t\tassert(not (check()))\r\n\tend)\r\n\r\n\tit(\"should support t.keyOf\", function()\r\n\t\tlocal myNewEnum = {\r\n\t\t\tOptionA = {},\r\n\t\t\tOptionB = {},\r\n\t\t}\r\n\t\tlocal check = t.keyOf(myNewEnum)\r\n\t\tassert(check(\"OptionA\"))\r\n\t\tassert(not (check(\"OptionC\")))\r\n\tend)\r\n\r\n\tit(\"should support t.valueOf\", function()\r\n\t\tlocal myNewEnum = {\r\n\t\t\tOptionA = {},\r\n\t\t\tOptionB = {},\r\n\t\t}\r\n\t\tlocal check = t.valueOf(myNewEnum)\r\n\t\tassert(check(myNewEnum.OptionA))\r\n\t\tassert(not (check(1010)))\r\n\tend)\r\n\r\n\tit(\"should support t.strictArray\", function()\r\n\t\tlocal fixedArrayCheck = t.strictArray(t.number, t.number)\r\n\r\n\t\tassert(fixedArrayCheck({1, 2}))\r\n\t\tassert(not fixedArrayCheck({1, 2, 3}))\r\n\t\tassert(not fixedArrayCheck({10}))\r\n\t\tassert(not fixedArrayCheck({\"Hello\", 10}))\r\n\t\tassert(not fixedArrayCheck({ Foo = \"Bar\" }))\r\n\r\n\t\tlocal fixedArrayCheck2 = t.strictArray(t.number, t.number, t.optional(t.string))\r\n\r\n\t\tassert(fixedArrayCheck2({10, 20}))\r\n\t\tassert(fixedArrayCheck2({10, 20, \"Hello\"}))\r\n\t\tassert(not fixedArrayCheck2({10, 20, 30}))\r\n\tend)\r\nend"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"1a31bb8458eefe0db2d00eab15f6b14f":{"Id":"1a31bb8458eefe0db2d00eab15f6b14f","Parent":"5d73467a1d588843ea200ceeebce3eb5","Name":"Baseplate","ClassName":"Part","Properties":{"Locked":{"Bool":true},"Position":{"Vector3":[0.0,-10.0,0.0]},"Size":{"Vector3":[512.0,20.0,512.0]},"Color":{"Color3":[0.38823,0.37254,0.38823]},"Anchored":{"Bool":true}},"Children":[],"Metadata":{"ignoreUnknownInstances":true}},"89734f1df997de85fd2bdd427ddf34fb":{"Id":"89734f1df997de85fd2bdd427ddf34fb","Parent":"e412d57eace8911b86fabef6e8521d77","Name":"Wormhole","ClassName":"ModuleScript","Properties":{"Source":{"String":"local ReplicatedStorage: ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\r\nlocal RunService: RunService = game:GetService(\"RunService\")\r\n\r\nlocal t = require(script.Parent.Parent.t)\r\nlocal Promise = require(script.Parent.Parent.Promise)\r\n\r\nlocal types = require(script.Parent.Types)\r\nlocal AwaitForValue = require(script.Parent.Promises.promiseAwaitValue)\r\n\r\nlocal Context = require(script.Parent.Context)\r\nlocal Subscription = require(script.Parent.Subscription)\r\n\r\ntype IContext = types.IContext\r\ntype ISubscription = types.ISubscription\r\ntype IWormhole = types.IWormhole\r\ntype ContextBlock = types.ContextBlock\r\ntype IPackage = types.IPackage\r\n\r\nlocal RemoteFolderName= \"Portal\"\r\nlocal Storage: Folder = ReplicatedStorage:FindFirstChild(RemoteFolderName) :: Folder\r\n\r\nif not Storage then\r\n\tif RunService:IsServer() then\r\n\t\tStorage = Instance.new(\"Folder\")\r\n\t\tStorage.Name = RemoteFolderName\r\n\t\tStorage.Parent = ReplicatedStorage\r\n\telse\r\n\t\tStorage = ReplicatedStorage:WaitForChild(RemoteFolderName) :: Folder\r\n\tend\r\nend\r\n\r\nlocal function createPackage(context: string, action: string, data: any): IPackage\r\n\treturn {\r\n\t\tContext = context,\r\n\t\tAction = action,\r\n\t\tTimestamp = DateTime.now(),\r\n\t\tPayload = data\r\n\t} :: IPackage\r\nend\r\n\r\nlocal Wormhole: IWormhole\r\nWormhole._Storage = Storage\r\nWormhole._Contexts = {}\r\nWormhole.__index = Wormhole\r\n\r\nfunction Wormhole.new(): IWormhole\r\n\tlocal self = setmetatable({}, Wormhole)\r\n\treturn self :: IWormhole\r\nend\r\n\r\nfunction Wormhole.is(wormhole: IWormhole): boolean\r\n\treturn types.isWormhole(wormhole)\r\nend\r\n\r\nfunction Wormhole.awaitContext(wormhole: IWormhole, context: string, timeout: number?): ContextBlock\r\n\tlocal check = t.strict(t.tuple(t.string, t.optional(t.number)))\r\n\tcheck(context, timeout)\r\n\r\n\tlocal contextPromise = AwaitForValue(context, wormhole._Contexts)\r\n\tif timeout then \r\n\t\tcontextPromise:timeout(timeout)\r\n\tend\r\n\tcontextPromise:catch(function(e)\r\n\t\twarn(\"Uh oh! Something went wrong awaiting context\\n\", e)\r\n\r\n\t\tif not wormhole._Contexts[context] then\r\n\t\t\twormhole._Contexts[context] = Wormhole.addContext(wormhole, context)\r\n\t\tend\r\n\t\treturn wormhole._Contexts[context]\r\n\tend)\r\n\r\n\treturn contextPromise:expect() :: ContextBlock\r\nend\r\n\r\nfunction Wormhole.addContext(wormhole: IWormhole, context: string): ContextBlock\r\n\tlocal new: ContextBlock = {\r\n\t\tRemote = Instance.new(\"RemoteEvent\"),\r\n\t\tContext = Context.new(context, wormhole),\r\n\t\tActions = {}\r\n\t}\r\n\twormhole._Contexts[context] = new\r\n\r\n\treturn wormhole._Contexts[context]\r\nend\r\n\r\nfunction Wormhole.makeSubscription(wormhole: IWormhole, context: string, action: string): ISubscription\r\n\tlocal subscription: ISubscription\r\n\tsubscription = Subscription.new(context, action)\r\n\treturn subscription\r\nend\r\n\r\nfunction Wormhole.doSubscribe(wormhole: IWormhole, subscription: ISubscription, callback: ()->()?): ()\r\n\t\r\n\tlocal eventConnection: RBXScriptConnection\r\n\tlocal context: ContextBlock = wormhole.awaitContext(subscription.Context)\r\n\tif RunService:IsServer() then\r\n\t\teventConnection = context.Remote.OnServerEvent:Connect(\r\n\t\t\tfunction(listener: Player, package: IPackage)\r\n\t\t\t\tlocal check = t.strict(t.instanceIsA(\"Player\"))\r\n\t\t\t\tcheck(listener)\r\n\t\t\tend\r\n\t\t)\r\n\telse\r\n\t\teventConnection = context.Remote.OnClientEvent:Connect(\r\n\t\t\tfunction(listener: Player, package: IPackage)\r\n\t\t\t\tlocal check = t.strict(t.instanceIsA(\"Player\"))\r\n\t\t\t\tcheck(listener)\r\n\t\t\tend\r\n\t\t)\r\n\tend\r\n\r\n\treturn function()\r\n\t\teventConnection:Disconnect()\r\n\tend\r\nend\r\n\r\nreturn Wormhole"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"ee222f38fa8be78c47f18fd875ac7854":{"Id":"ee222f38fa8be78c47f18fd875ac7854","Parent":"7fbc840dac8c567469e92bc32ba7f9df","Name":"Packages","ClassName":"Folder","Properties":{},"Children":["8d7217c7f2aaf98a45b764cd6f5e70a3","2e2d4268ad91d40d489844d149b7c87e","3860334f5903be77d1957718f152993f","e412d57eace8911b86fabef6e8521d77"],"Metadata":{"ignoreUnknownInstances":false}},"a143059ecae834aee41b94f5ac29f512":{"Id":"a143059ecae834aee41b94f5ac29f512","Parent":"372383b65caa3b15b65ef42feec874b8","Name":"SoundService","ClassName":"SoundService","Properties":{"RespectFilteringEnabled":{"Bool":true}},"Children":[],"Metadata":{"ignoreUnknownInstances":true}},"13407f4c65e57105e82422a6a09fcfa8":{"Id":"13407f4c65e57105e82422a6a09fcfa8","Parent":"2e2d4268ad91d40d489844d149b7c87e","Name":"evaera_promise@3.1.0","ClassName":"Folder","Properties":{},"Children":["9cd69536a0dc973cffeed65b16a569e0"],"Metadata":{"ignoreUnknownInstances":false}},"46bcc92ca5dc93da75ba685ae7cb4991":{"Id":"46bcc92ca5dc93da75ba685ae7cb4991","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"IContext","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\r\n\r\nlocal IsContext = t.interface({\r\n\tName = t.string,\r\n\tSubscriptions = t.map(t.string, t.callback)\r\n})\r\n\r\nexport type IContext = {\r\n\tName: string,\r\n\tSubscriptions: {[string]: ()->nil},\r\n\t\r\n\t__index: IContext,\r\n\tnew: (context: string, provider: any) -> IContext,\r\n\tis: (obj: any) -> boolean,\r\n\r\n\tPublish: (self: IContext, action: string, data: any) -> (),\r\n\tSubscribe: (self: IContext, action: string, callback: () -> ()) -> (),\r\n\tDestroy: (self: IContext) -> nil\r\n}\r\n\r\nreturn function(obj)\r\n\treturn IsContext(obj) :: boolean\r\nend"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"2e2d4268ad91d40d489844d149b7c87e":{"Id":"2e2d4268ad91d40d489844d149b7c87e","Parent":"ee222f38fa8be78c47f18fd875ac7854","Name":"_Index","ClassName":"Folder","Properties":{},"Children":["13407f4c65e57105e82422a6a09fcfa8","9ee814837a27b11857e89563135cd306"],"Metadata":{"ignoreUnknownInstances":false}},"3860334f5903be77d1957718f152993f":{"Id":"3860334f5903be77d1957718f152993f","Parent":"ee222f38fa8be78c47f18fd875ac7854","Name":"t","ClassName":"ModuleScript","Properties":{"Source":{"String":"return require(script.Parent._Index[\"shanebutt_t@1.3.1\"][\"t\"])\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"6978a188358d64bfb2103712202a9922":{"Id":"6978a188358d64bfb2103712202a9922","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"ISubscription","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\n\nlocal IsSUbscription = t.interface({\n\tContext = t.string,\n\tAction = t.string,\n\tCallback = t.optional(t.callback()),\n})\n\nexport type ISubscription = {\n\tContext: string,\n\tAction: string,\n\tCallback: () -> nil,\n\n\t__index: ISubscription,\n\n\tnew: (context: string, action: string, callback: () -> ()?) -> ISubscription,\n\tis: (obj: any) -> boolean,\n\n\tSubscribe: (self: ISubscription, callback: () -> nil) -> ISubscription,\n}\n\nreturn function(obj)\n\treturn IsSubscription(obj) :: boolean\nend\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"372383b65caa3b15b65ef42feec874b8":{"Id":"372383b65caa3b15b65ef42feec874b8","Parent":"00000000000000000000000000000000","Name":"portal","ClassName":"DataModel","Properties":{},"Children":["bc7710f6aad3249798ac01ac70c608b3","7fbc840dac8c567469e92bc32ba7f9df","a143059ecae834aee41b94f5ac29f512","5d73467a1d588843ea200ceeebce3eb5"],"Metadata":{"ignoreUnknownInstances":true}},"7fbc840dac8c567469e92bc32ba7f9df":{"Id":"7fbc840dac8c567469e92bc32ba7f9df","Parent":"372383b65caa3b15b65ef42feec874b8","Name":"ReplicatedStorage","ClassName":"ReplicatedStorage","Properties":{},"Children":["ee222f38fa8be78c47f18fd875ac7854"],"Metadata":{"ignoreUnknownInstances":true}},"9cd69536a0dc973cffeed65b16a569e0":{"Id":"9cd69536a0dc973cffeed65b16a569e0","Parent":"13407f4c65e57105e82422a6a09fcfa8","Name":"promise","ClassName":"ModuleScript","Properties":{"Source":{"String":"--[[\r\n\tAn implementation of Promises similar to Promise/A+.\r\n]]\r\n\r\nlocal ERROR_NON_PROMISE_IN_LIST = \"Non-promise value passed into %s at index %s\"\r\nlocal ERROR_NON_LIST = \"Please pass a list of promises to %s\"\r\nlocal ERROR_NON_FUNCTION = \"Please pass a handler function to %s!\"\r\nlocal MODE_KEY_METATABLE = {__mode = \"k\"}\r\n\r\n--[[\r\n\tCreates an enum dictionary with some metamethods to prevent common mistakes.\r\n]]\r\nlocal function makeEnum(enumName, members)\r\n\tlocal enum = {}\r\n\r\n\tfor _, memberName in ipairs(members) do\r\n\t\tenum[memberName] = memberName\r\n\tend\r\n\r\n\treturn setmetatable(enum, {\r\n\t\t__index = function(_, k)\r\n\t\t\terror(string.format(\"%s is not in %s!\", k, enumName), 2)\r\n\t\tend,\r\n\t\t__newindex = function()\r\n\t\t\terror(string.format(\"Creating new members in %s is not allowed!\", enumName), 2)\r\n\t\tend,\r\n\t})\r\nend\r\n\r\n--[=[\r\n\tAn object to represent runtime errors that occur during execution.\r\n\tPromises that experience an error like this will be rejected with\r\n\tan instance of this object.\r\n\r\n\t@class Error\r\n]=]\r\nlocal Error do\r\n\tError = {\r\n\t\tKind = makeEnum(\"Promise.Error.Kind\", {\r\n\t\t\t\"ExecutionError\",\r\n\t\t\t\"AlreadyCancelled\",\r\n\t\t\t\"NotResolvedInTime\",\r\n\t\t\t\"TimedOut\",\r\n\t\t}),\r\n\t}\r\n\tError.__index = Error\r\n\r\n\tfunction Error.new(options, parent)\r\n\t\toptions = options or {}\r\n\t\treturn setmetatable({\r\n\t\t\terror = tostring(options.error) or \"[This error has no error text.]\",\r\n\t\t\ttrace = options.trace,\r\n\t\t\tcontext = options.context,\r\n\t\t\tkind = options.kind,\r\n\t\t\tparent = parent,\r\n\t\t\tcreatedTick = os.clock(),\r\n\t\t\tcreatedTrace = debug.traceback(),\r\n\t\t}, Error)\r\n\tend\r\n\r\n\tfunction Error.is(anything)\r\n\t\tif type(anything) == \"table\" then\r\n\t\t\tlocal metatable = getmetatable(anything)\r\n\r\n\t\t\tif type(metatable) == \"table\" then\r\n\t\t\t\treturn rawget(anything, \"error\") ~= nil and type(rawget(metatable, \"extend\")) == \"function\"\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn false\r\n\tend\r\n\r\n\tfunction Error.isKind(anything, kind)\r\n\t\tassert(kind ~= nil, \"Argument #2 to Promise.Error.isKind must not be nil\")\r\n\r\n\t\treturn Error.is(anything) and anything.kind == kind\r\n\tend\r\n\r\n\tfunction Error:extend(options)\r\n\t\toptions = options or {}\r\n\r\n\t\toptions.kind = options.kind or self.kind\r\n\r\n\t\treturn Error.new(options, self)\r\n\tend\r\n\r\n\tfunction Error:getErrorChain()\r\n\t\tlocal runtimeErrors = { self }\r\n\r\n\t\twhile runtimeErrors[#runtimeErrors].parent do\r\n\t\t\ttable.insert(runtimeErrors, runtimeErrors[#runtimeErrors].parent)\r\n\t\tend\r\n\r\n\t\treturn runtimeErrors\r\n\tend\r\n\r\n\tfunction Error:__tostring()\r\n\t\tlocal errorStrings = {\r\n\t\t\tstring.format(\"-- Promise.Error(%s) --\", self.kind or \"?\"),\r\n\t\t}\r\n\r\n\t\tfor _, runtimeError in ipairs(self:getErrorChain()) do\r\n\t\t\ttable.insert(errorStrings, table.concat({\r\n\t\t\t\truntimeError.trace or runtimeError.error,\r\n\t\t\t\truntimeError.context,\r\n\t\t\t}, \"\\n\"))\r\n\t\tend\r\n\r\n\t\treturn table.concat(errorStrings, \"\\n\")\r\n\tend\r\nend\r\n\r\n--[[\r\n\tPacks a number of arguments into a table and returns its length.\r\n\r\n\tUsed to cajole varargs without dropping sparse values.\r\n]]\r\nlocal function pack(...)\r\n\treturn select(\"#\", ...), { ... }\r\nend\r\n\r\n--[[\r\n\tReturns first value (success), and packs all following values.\r\n]]\r\nlocal function packResult(success, ...)\r\n\treturn success, select(\"#\", ...), { ... }\r\nend\r\n\r\nlocal function makeErrorHandler(traceback)\r\n\tassert(traceback ~= nil)\r\n\r\n\treturn function(err)\r\n\t\t-- If the error object is already a table, forward it directly.\r\n\t\t-- Should we extend the error here and add our own trace?\r\n\r\n\t\tif type(err) == \"table\" then\r\n\t\t\treturn err\r\n\t\tend\r\n\r\n\t\treturn Error.new({\r\n\t\t\terror = err,\r\n\t\t\tkind = Error.Kind.ExecutionError,\r\n\t\t\ttrace = debug.traceback(tostring(err), 2),\r\n\t\t\tcontext = \"Promise created at:\\n\\n\" .. traceback,\r\n\t\t})\r\n\tend\r\nend\r\n\r\n--[[\r\n\tCalls a Promise executor with error handling.\r\n]]\r\nlocal function runExecutor(traceback, callback, ...)\r\n\treturn packResult(xpcall(callback, makeErrorHandler(traceback), ...))\r\nend\r\n\r\n--[[\r\n\tCreates a function that invokes a callback with correct error handling and\r\n\tresolution mechanisms.\r\n]]\r\nlocal function createAdvancer(traceback, callback, resolve, reject)\r\n\treturn function(...)\r\n\t\tlocal ok, resultLength, result = runExecutor(traceback, callback, ...)\r\n\r\n\t\tif ok then\r\n\t\t\tresolve(unpack(result, 1, resultLength))\r\n\t\telse\r\n\t\t\treject(result[1])\r\n\t\tend\r\n\tend\r\nend\r\n\r\nlocal function isEmpty(t)\r\n\treturn next(t) == nil\r\nend\r\n\r\n--[=[\r\n\tAn enum value used to represent the Promise's status.\r\n\t@interface Status\r\n\t@tag enum\r\n\t@within Promise\r\n\t.Started \"Started\" -- The Promise is executing, and not settled yet.\r\n\t.Resolved \"Resolved\" -- The Promise finished successfully.\r\n\t.Rejected \"Rejected\" -- The Promise was rejected.\r\n\t.Cancelled \"Cancelled\" -- The Promise was cancelled before it finished.\r\n]=]\r\n--[=[\r\n\t@prop Status Status\r\n\t@within Promise\r\n\t@readonly\r\n\t@tag enums\r\n\tA table containing all members of the `Status` enum, e.g., `Promise.Status.Resolved`.\r\n]=]\r\n--[=[\r\n\tA Promise is an object that represents a value that will exist in the future, but doesn't right now.\r\n\tPromises allow you to then attach callbacks that can run once the value becomes available (known as *resolving*),\r\n\tor if an error has occurred (known as *rejecting*).\r\n\r\n\t@class Promise\r\n\t@__index prototype\r\n]=]\r\nlocal Promise = {\r\n\tError = Error,\r\n\tStatus = makeEnum(\"Promise.Status\", {\"Started\", \"Resolved\", \"Rejected\", \"Cancelled\"}),\r\n\t_getTime = os.clock,\r\n\t_timeEvent = game:GetService(\"RunService\").Heartbeat,\r\n}\r\nPromise.prototype = {}\r\nPromise.__index = Promise.prototype\r\n\r\nfunction Promise._new(traceback, callback, parent)\r\n\tif parent ~= nil and not Promise.is(parent) then\r\n\t\terror(\"Argument #2 to Promise.new must be a promise or nil\", 2)\r\n\tend\r\n\r\n\tlocal self = {\r\n\t\t-- Used to locate where a promise was created\r\n\t\t_source = traceback,\r\n\r\n\t\t_status = Promise.Status.Started,\r\n\r\n\t\t-- A table containing a list of all results, whether success or failure.\r\n\t\t-- Only valid if _status is set to something besides Started\r\n\t\t_values = nil,\r\n\r\n\t\t-- Lua doesn't like sparse arrays very much, so we explicitly store the\r\n\t\t-- length of _values to handle middle nils.\r\n\t\t_valuesLength = -1,\r\n\r\n\t\t-- Tracks if this Promise has no error observers..\r\n\t\t_unhandledRejection = true,\r\n\r\n\t\t-- Queues representing functions we should invoke when we update!\r\n\t\t_queuedResolve = {},\r\n\t\t_queuedReject = {},\r\n\t\t_queuedFinally = {},\r\n\r\n\t\t-- The function to run when/if this promise is cancelled.\r\n\t\t_cancellationHook = nil,\r\n\r\n\t\t-- The \"parent\" of this promise in a promise chain. Required for\r\n\t\t-- cancellation propagation upstream.\r\n\t\t_parent = parent,\r\n\r\n\t\t-- Consumers are Promises that have chained onto this one.\r\n\t\t-- We track them for cancellation propagation downstream.\r\n\t\t_consumers = setmetatable({}, MODE_KEY_METATABLE),\r\n\t}\r\n\r\n\tif parent and parent._status == Promise.Status.Started then\r\n\t\tparent._consumers[self] = true\r\n\tend\r\n\r\n\tsetmetatable(self, Promise)\r\n\r\n\tlocal function resolve(...)\r\n\t\tself:_resolve(...)\r\n\tend\r\n\r\n\tlocal function reject(...)\r\n\t\tself:_reject(...)\r\n\tend\r\n\r\n\tlocal function onCancel(cancellationHook)\r\n\t\tif cancellationHook then\r\n\t\t\tif self._status == Promise.Status.Cancelled then\r\n\t\t\t\tcancellationHook()\r\n\t\t\telse\r\n\t\t\t\tself._cancellationHook = cancellationHook\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn self._status == Promise.Status.Cancelled\r\n\tend\r\n\r\n\tcoroutine.wrap(function()\r\n\t\tlocal ok, _, result = runExecutor(\r\n\t\t\tself._source,\r\n\t\t\tcallback,\r\n\t\t\tresolve,\r\n\t\t\treject,\r\n\t\t\tonCancel\r\n\t\t)\r\n\r\n\t\tif not ok then\r\n\t\t\treject(result[1])\r\n\t\tend\r\n\tend)()\r\n\r\n\treturn self\r\nend\r\n\r\n--[=[\r\n\tConstruct a new Promise that will be resolved or rejected with the given callbacks.\r\n\r\n\tIf you `resolve` with a Promise, it will be chained onto.\r\n\r\n\tYou can safely yield within the executor function and it will not block the creating thread.\r\n\r\n\t```lua\r\n\tlocal myFunction()\r\n\t\treturn Promise.new(function(resolve, reject, onCancel)\r\n\t\t\twait(1)\r\n\t\t\tresolve(\"Hello world!\")\r\n\t\tend)\r\n\tend\r\n\r\n\tmyFunction():andThen(print)\r\n\t```\r\n\r\n\tYou do not need to use `pcall` within a Promise. Errors that occur during execution will be caught and turned into a rejection automatically. If `error()` is called with a table, that table will be the rejection value. Otherwise, string errors will be converted into `Promise.Error(Promise.Error.Kind.ExecutionError)` objects for tracking debug information.\r\n\r\n\tYou may register an optional cancellation hook by using the `onCancel` argument:\r\n\r\n\t* This should be used to abort any ongoing operations leading up to the promise being settled.\r\n\t* Call the `onCancel` function with a function callback as its only argument to set a hook which will in turn be called when/if the promise is cancelled.\r\n\t* `onCancel` returns `true` if the Promise was already cancelled when you called `onCancel`.\r\n\t* Calling `onCancel` with no argument will not override a previously set cancellation hook, but it will still return `true` if the Promise is currently cancelled.\r\n\t* You can set the cancellation hook at any time before resolving.\r\n\t* When a promise is cancelled, calls to `resolve` or `reject` will be ignored, regardless of if you set a cancellation hook or not.\r\n\r\n\t@param executor (resolve: (...: any) -> (), reject: (...: any) -> (), onCancel: (abortHandler: () -> boolean)) -> ()\r\n\t@return Promise\r\n]=]\r\nfunction Promise.new(executor)\r\n\treturn Promise._new(debug.traceback(nil, 2), executor)\r\nend\r\n\r\nfunction Promise:__tostring()\r\n\treturn string.format(\"Promise(%s)\", self._status)\r\nend\r\n\r\n--[=[\r\n\tThe same as [Promise.new](/api/Promise#new), except execution begins after the next `Heartbeat` event.\r\n\r\n\tThis is a spiritual replacement for `spawn`, but it does not suffer from the same [issues](https://eryn.io/gist/3db84579866c099cdd5bb2ff37947cec) as `spawn`.\r\n\r\n\t```lua\r\n\tlocal function waitForChild(instance, childName, timeout)\r\n\t return Promise.defer(function(resolve, reject)\r\n\t\tlocal child = instance:WaitForChild(childName, timeout)\r\n\r\n\t\t;(child and resolve or reject)(child)\r\n\t end)\r\n\tend\r\n\t```\r\n\r\n\t@param executor (resolve: (...: any) -> (), reject: (...: any) -> (), onCancel: (abortHandler: () -> boolean)) -> ()\r\n\t@return Promise\r\n]=]\r\nfunction Promise.defer(callback)\r\n\tlocal traceback = debug.traceback(nil, 2)\r\n\tlocal promise\r\n\tpromise = Promise._new(traceback, function(resolve, reject, onCancel)\r\n\t\tlocal connection\r\n\t\tconnection = Promise._timeEvent:Connect(function()\r\n\t\t\tconnection:Disconnect()\r\n\t\t\tlocal ok, _, result = runExecutor(traceback, callback, resolve, reject, onCancel)\r\n\r\n\t\t\tif not ok then\r\n\t\t\t\treject(result[1])\r\n\t\t\tend\r\n\t\tend)\r\n\tend)\r\n\r\n\treturn promise\r\nend\r\n\r\n-- Backwards compatibility\r\nPromise.async = Promise.defer\r\n\r\n--[=[\r\n\tCreates an immediately resolved Promise with the given value.\r\n\r\n\t@param ... any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.resolve(...)\r\n\tlocal length, values = pack(...)\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve)\r\n\t\tresolve(unpack(values, 1, length))\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tCreates an immediately rejected Promise with the given value.\r\n\r\n\t:::caution\r\n\tSomething needs to consume this rejection (i.e. `:catch()` it), otherwise it will emit an unhandled Promise rejection warning on the next frame. Thus, you should not create and store rejected Promises for later use. Only create them on-demand as needed.\r\n\t:::\r\n\r\n\t```lua\r\n\t-- Example using Promise.resolve to deliver cached values:\r\n\tfunction getSomething(name)\r\n\t\tif cache[name] then\r\n\t\t\treturn Promise.resolve(cache[name])\r\n\t\telse\r\n\t\t\treturn Promise.new(function(resolve, reject)\r\n\t\t\t\tlocal thing = getTheThing()\r\n\t\t\t\tcache[name] = thing\r\n\r\n\t\t\t\tresolve(thing)\r\n\t\t\tend)\r\n\t\tend\r\n\tend\r\n\t```\r\n\r\n\t@param ... any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.reject(...)\r\n\tlocal length, values = pack(...)\r\n\treturn Promise._new(debug.traceback(nil, 2), function(_, reject)\r\n\t\treject(unpack(values, 1, length))\r\n\tend)\r\nend\r\n\r\n--[[\r\n\tRuns a non-promise-returning function as a Promise with the\r\n given arguments.\r\n]]\r\nfunction Promise._try(traceback, callback, ...)\r\n\tlocal valuesLength, values = pack(...)\r\n\r\n\treturn Promise._new(traceback, function(resolve)\r\n\t\tresolve(callback(unpack(values, 1, valuesLength)))\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tBegins a Promise chain, calling a function and returning a Promise resolving with its return value. If the function errors, the returned Promise will be rejected with the error. You can safely yield within the Promise.try callback.\r\n\r\n\t:::info\r\n\t`Promise.try` is similar to [Promise.promisify](#promisify), except the callback is invoked immediately instead of returning a new function.\r\n\t:::\r\n\r\n\t```lua\r\n\tPromise.try(function()\r\n\t\treturn math.random(1, 2) == 1 and \"ok\" or error(\"Oh an error!\")\r\n\tend)\r\n\t\t:andThen(function(text)\r\n\t\t\tprint(text)\r\n\t\tend)\r\n\t\t:catch(function(err)\r\n\t\t\twarn(\"Something went wrong\")\r\n\t\tend)\r\n\t```\r\n\r\n\t@param callback (...: any) -> ...any\r\n\t@return Promise\r\n]=]\r\nfunction Promise.try(...)\r\n\treturn Promise._try(debug.traceback(nil, 2), ...)\r\nend\r\n\r\n--[[\r\n\tReturns a new promise that:\r\n\t\t* is resolved when all input promises resolve\r\n\t\t* is rejected if ANY input promises reject\r\n]]\r\nfunction Promise._all(traceback, promises, amount)\r\n\tif type(promises) ~= \"table\" then\r\n\t\terror(string.format(ERROR_NON_LIST, \"Promise.all\"), 3)\r\n\tend\r\n\r\n\t-- We need to check that each value is a promise here so that we can produce\r\n\t-- a proper error rather than a rejected promise with our error.\r\n\tfor i, promise in pairs(promises) do\r\n\t\tif not Promise.is(promise) then\r\n\t\t\terror(string.format(ERROR_NON_PROMISE_IN_LIST, \"Promise.all\", tostring(i)), 3)\r\n\t\tend\r\n\tend\r\n\r\n\t-- If there are no values then return an already resolved promise.\r\n\tif #promises == 0 or amount == 0 then\r\n\t\treturn Promise.resolve({})\r\n\tend\r\n\r\n\treturn Promise._new(traceback, function(resolve, reject, onCancel)\r\n\t\t-- An array to contain our resolved values from the given promises.\r\n\t\tlocal resolvedValues = {}\r\n\t\tlocal newPromises = {}\r\n\r\n\t\t-- Keep a count of resolved promises because just checking the resolved\r\n\t\t-- values length wouldn't account for promises that resolve with nil.\r\n\t\tlocal resolvedCount = 0\r\n\t\tlocal rejectedCount = 0\r\n\t\tlocal done = false\r\n\r\n\t\tlocal function cancel()\r\n\t\t\tfor _, promise in ipairs(newPromises) do\r\n\t\t\t\tpromise:cancel()\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\t-- Called when a single value is resolved and resolves if all are done.\r\n\t\tlocal function resolveOne(i, ...)\r\n\t\t\tif done then\r\n\t\t\t\treturn\r\n\t\t\tend\r\n\r\n\t\t\tresolvedCount = resolvedCount + 1\r\n\r\n\t\t\tif amount == nil then\r\n\t\t\t\tresolvedValues[i] = ...\r\n\t\t\telse\r\n\t\t\t\tresolvedValues[resolvedCount] = ...\r\n\t\t\tend\r\n\r\n\t\t\tif resolvedCount >= (amount or #promises) then\r\n\t\t\t\tdone = true\r\n\t\t\t\tresolve(resolvedValues)\r\n\t\t\t\tcancel()\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tonCancel(cancel)\r\n\r\n\t\t-- We can assume the values inside `promises` are all promises since we\r\n\t\t-- checked above.\r\n\t\tfor i, promise in ipairs(promises) do\r\n\t\t\tnewPromises[i] = promise:andThen(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\tresolveOne(i, ...)\r\n\t\t\t\tend,\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\trejectedCount = rejectedCount + 1\r\n\r\n\t\t\t\t\tif amount == nil or #promises - rejectedCount < amount then\r\n\t\t\t\t\t\tcancel()\r\n\t\t\t\t\t\tdone = true\r\n\r\n\t\t\t\t\t\treject(...)\r\n\t\t\t\t\tend\r\n\t\t\t\tend\r\n\t\t\t)\r\n\t\tend\r\n\r\n\t\tif done then\r\n\t\t\tcancel()\r\n\t\tend\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a new promise that:\r\n\t* is resolved after all input promises resolve.\r\n\t* is rejected if *any* input promises reject.\r\n\r\n\t:::info\r\n\tOnly the first return value from each promise will be present in the resulting array.\r\n\t:::\r\n\r\n\tAfter any input Promise rejects, all other input Promises that are still pending will be cancelled if they have no other consumers.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.all(promises)\r\n\t```\r\n\r\n\t@param promises {Promise}\r\n\t@return Promise<{T}>\r\n]=]\r\nfunction Promise.all(promises)\r\n\treturn Promise._all(debug.traceback(nil, 2), promises)\r\nend\r\n\r\n--[=[\r\n\tFolds an array of values or promises into a single value. The array is traversed sequentially.\r\n\r\n\tThe reducer function can return a promise or value directly. Each iteration receives the resolved value from the previous, and the first receives your defined initial value.\r\n\r\n\tThe folding will stop at the first rejection encountered.\r\n\t```lua\r\n\tlocal basket = {\"blueberry\", \"melon\", \"pear\", \"melon\"}\r\n\tPromise.fold(basket, function(cost, fruit)\r\n\t\tif fruit == \"blueberry\" then\r\n\t\t\treturn cost -- blueberries are free!\r\n\t\telse\r\n\t\t\t-- call a function that returns a promise with the fruit price\r\n\t\t\treturn fetchPrice(fruit):andThen(function(fruitCost)\r\n\t\t\t\treturn cost + fruitCost\r\n\t\t\tend)\r\n\t\tend\r\n\tend, 0)\r\n\t```\r\n\r\n\t@since v3.1.0\r\n\t@param list {T | Promise}\r\n\t@param reducer (accumulator: U, value: T, index: number) -> U | Promise\r\n\t@param initialValue U\r\n]=]\r\nfunction Promise.fold(list, callback, initialValue)\r\n\tassert(type(list) == \"table\", \"Bad argument #1 to Promise.fold: must be a table\")\r\n\tassert(type(callback) == \"function\", \"Bad argument #2 to Promise.fold: must be a function\")\r\n\r\n\tlocal accumulator = Promise.resolve(initialValue)\r\n\treturn Promise.each(list, function(resolvedElement, i)\r\n\t\taccumulator = accumulator:andThen(function(previousValueResolved)\r\n\t\t\treturn callback(previousValueResolved, resolvedElement, i)\r\n\t\tend)\r\n\tend):andThenReturn(accumulator)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a Promise that is resolved as soon as `count` Promises are resolved from the input array. The resolved array values are in the order that the Promises resolved in. When this Promise resolves, all other pending Promises are cancelled if they have no other consumers.\r\n\r\n\t`count` 0 results in an empty array. The resultant array will never have more than `count` elements.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.some(promises, 2) -- Only resolves with first 2 promises to resolve\r\n\t```\r\n\r\n\t@param promises {Promise}\r\n\t@param count number\r\n\t@return Promise<{T}>\r\n]=]\r\nfunction Promise.some(promises, amount)\r\n\tassert(type(amount) == \"number\", \"Bad argument #2 to Promise.some: must be a number\")\r\n\r\n\treturn Promise._all(debug.traceback(nil, 2), promises, amount)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a Promise that is resolved as soon as *any* of the input Promises resolves. It will reject only if *all* input Promises reject. As soon as one Promises resolves, all other pending Promises are cancelled if they have no other consumers.\r\n\r\n\tResolves directly with the value of the first resolved Promise. This is essentially [[Promise.some]] with `1` count, except the Promise resolves with the value directly instead of an array with one element.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.any(promises) -- Resolves with first value to resolve (only rejects if all 3 rejected)\r\n\t```\r\n\r\n\t@param promises {Promise}\r\n\t@return Promise\r\n]=]\r\nfunction Promise.any(promises)\r\n\treturn Promise._all(debug.traceback(nil, 2), promises, 1):andThen(function(values)\r\n\t\treturn values[1]\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a new Promise that resolves with an array of in-place Statuses when all input Promises have settled. This is equivalent to mapping `promise:finally` over the array of Promises.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.allSettled(promises)\r\n\t```\r\n\r\n\t@param promises {Promise}\r\n\t@return Promise<{Status}>\r\n]=]\r\nfunction Promise.allSettled(promises)\r\n\tif type(promises) ~= \"table\" then\r\n\t\terror(string.format(ERROR_NON_LIST, \"Promise.allSettled\"), 2)\r\n\tend\r\n\r\n\t-- We need to check that each value is a promise here so that we can produce\r\n\t-- a proper error rather than a rejected promise with our error.\r\n\tfor i, promise in pairs(promises) do\r\n\t\tif not Promise.is(promise) then\r\n\t\t\terror(string.format(ERROR_NON_PROMISE_IN_LIST, \"Promise.allSettled\", tostring(i)), 2)\r\n\t\tend\r\n\tend\r\n\r\n\t-- If there are no values then return an already resolved promise.\r\n\tif #promises == 0 then\r\n\t\treturn Promise.resolve({})\r\n\tend\r\n\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve, _, onCancel)\r\n\t\t-- An array to contain our resolved values from the given promises.\r\n\t\tlocal fates = {}\r\n\t\tlocal newPromises = {}\r\n\r\n\t\t-- Keep a count of resolved promises because just checking the resolved\r\n\t\t-- values length wouldn't account for promises that resolve with nil.\r\n\t\tlocal finishedCount = 0\r\n\r\n\t\t-- Called when a single value is resolved and resolves if all are done.\r\n\t\tlocal function resolveOne(i, ...)\r\n\t\t\tfinishedCount = finishedCount + 1\r\n\r\n\t\t\tfates[i] = ...\r\n\r\n\t\t\tif finishedCount >= #promises then\r\n\t\t\t\tresolve(fates)\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tonCancel(function()\r\n\t\t\tfor _, promise in ipairs(newPromises) do\r\n\t\t\t\tpromise:cancel()\r\n\t\t\tend\r\n\t\tend)\r\n\r\n\t\t-- We can assume the values inside `promises` are all promises since we\r\n\t\t-- checked above.\r\n\t\tfor i, promise in ipairs(promises) do\r\n\t\t\tnewPromises[i] = promise:finally(\r\n\t\t\t\tfunction(...)\r\n\t\t\t\t\tresolveOne(i, ...)\r\n\t\t\t\tend\r\n\t\t\t)\r\n\t\tend\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAccepts an array of Promises and returns a new promise that is resolved or rejected as soon as any Promise in the array resolves or rejects.\r\n\r\n\t:::warning\r\n\tIf the first Promise to settle from the array settles with a rejection, the resulting Promise from `race` will reject.\r\n\r\n\tIf you instead want to tolerate rejections, and only care about at least one Promise resolving, you should use [Promise.any](#any) or [Promise.some](#some) instead.\r\n\t:::\r\n\r\n\tAll other Promises that don't win the race will be cancelled if they have no other consumers.\r\n\r\n\t```lua\r\n\tlocal promises = {\r\n\t\treturnsAPromise(\"example 1\"),\r\n\t\treturnsAPromise(\"example 2\"),\r\n\t\treturnsAPromise(\"example 3\"),\r\n\t}\r\n\r\n\treturn Promise.race(promises) -- Only returns 1st value to resolve or reject\r\n\t```\r\n\r\n\t@param promises: {Promise}\r\n\t@return Promise\r\n]=]\r\nfunction Promise.race(promises)\r\n\tassert(type(promises) == \"table\", string.format(ERROR_NON_LIST, \"Promise.race\"))\r\n\r\n\tfor i, promise in pairs(promises) do\r\n\t\tassert(Promise.is(promise), string.format(ERROR_NON_PROMISE_IN_LIST, \"Promise.race\", tostring(i)))\r\n\tend\r\n\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve, reject, onCancel)\r\n\t\tlocal newPromises = {}\r\n\t\tlocal finished = false\r\n\r\n\t\tlocal function cancel()\r\n\t\t\tfor _, promise in ipairs(newPromises) do\r\n\t\t\t\tpromise:cancel()\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tlocal function finalize(callback)\r\n\t\t\treturn function (...)\r\n\t\t\t\tcancel()\r\n\t\t\t\tfinished = true\r\n\t\t\t\treturn callback(...)\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tif onCancel(finalize(reject)) then\r\n\t\t\treturn\r\n\t\tend\r\n\r\n\t\tfor i, promise in ipairs(promises) do\r\n\t\t\tnewPromises[i] = promise:andThen(finalize(resolve), finalize(reject))\r\n\t\tend\r\n\r\n\t\tif finished then\r\n\t\t\tcancel()\r\n\t\tend\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tIterates serially over the given an array of values, calling the predicate callback on each value before continuing.\r\n\r\n\tIf the predicate returns a Promise, we wait for that Promise to resolve before moving on to the next item\r\n\tin the array.\r\n\r\n\t:::info\r\n\t`Promise.each` is similar to `Promise.all`, except the Promises are ran in order instead of all at once.\r\n\r\n\tBut because Promises are eager, by the time they are created, they're already running. Thus, we need a way to defer creation of each Promise until a later time.\r\n\r\n\tThe predicate function exists as a way for us to operate on our data instead of creating a new closure for each Promise. If you would prefer, you can pass in an array of functions, and in the predicate, call the function and return its return value.\r\n\t:::\r\n\r\n\t```lua\r\n\tPromise.each({\r\n\t\t\"foo\",\r\n\t\t\"bar\",\r\n\t\t\"baz\",\r\n\t\t\"qux\"\r\n\t}, function(value, index)\r\n\t\treturn Promise.delay(1):andThen(function()\r\n\t\tprint((\"%d) Got %s!\"):format(index, value))\r\n\t\tend)\r\n\tend)\r\n\r\n\t--[[\r\n\t\t(1 second passes)\r\n\t\t> 1) Got foo!\r\n\t\t(1 second passes)\r\n\t\t> 2) Got bar!\r\n\t\t(1 second passes)\r\n\t\t> 3) Got baz!\r\n\t\t(1 second passes)\r\n\t\t> 4) Got qux!\r\n\t]]\r\n\t```\r\n\r\n\tIf the Promise a predicate returns rejects, the Promise from `Promise.each` is also rejected with the same value.\r\n\r\n\tIf the array of values contains a Promise, when we get to that point in the list, we wait for the Promise to resolve before calling the predicate with the value.\r\n\r\n\tIf a Promise in the array of values is already Rejected when `Promise.each` is called, `Promise.each` rejects with that value immediately (the predicate callback will never be called even once). If a Promise in the list is already Cancelled when `Promise.each` is called, `Promise.each` rejects with `Promise.Error(Promise.Error.Kind.AlreadyCancelled`). If a Promise in the array of values is Started at first, but later rejects, `Promise.each` will reject with that value and iteration will not continue once iteration encounters that value.\r\n\r\n\tReturns a Promise containing an array of the returned/resolved values from the predicate for each item in the array of values.\r\n\r\n\tIf this Promise returned from `Promise.each` rejects or is cancelled for any reason, the following are true:\r\n\t- Iteration will not continue.\r\n\t- Any Promises within the array of values will now be cancelled if they have no other consumers.\r\n\t- The Promise returned from the currently active predicate will be cancelled if it hasn't resolved yet.\r\n\r\n\t@since 3.0.0\r\n\t@param list {T | Promise}\r\n\t@param predicate (value: T, index: number) -> U | Promise\r\n\t@return Promise<{U}>\r\n]=]\r\nfunction Promise.each(list, predicate)\r\n\tassert(type(list) == \"table\", string.format(ERROR_NON_LIST, \"Promise.each\"))\r\n\tassert(type(predicate) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise.each\"))\r\n\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve, reject, onCancel)\r\n\t\tlocal results = {}\r\n\t\tlocal promisesToCancel = {}\r\n\r\n\t\tlocal cancelled = false\r\n\r\n\t\tlocal function cancel()\r\n\t\t\tfor _, promiseToCancel in ipairs(promisesToCancel) do\r\n\t\t\t\tpromiseToCancel:cancel()\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tonCancel(function()\r\n\t\t\tcancelled = true\r\n\r\n\t\t\tcancel()\r\n\t\tend)\r\n\r\n\t\t-- We need to preprocess the list of values and look for Promises.\r\n\t\t-- If we find some, we must register our andThen calls now, so that those Promises have a consumer\r\n\t\t-- from us registered. If we don't do this, those Promises might get cancelled by something else\r\n\t\t-- before we get to them in the series because it's not possible to tell that we plan to use it\r\n\t\t-- unless we indicate it here.\r\n\r\n\t\tlocal preprocessedList = {}\r\n\r\n\t\tfor index, value in ipairs(list) do\r\n\t\t\tif Promise.is(value) then\r\n\t\t\t\tif value:getStatus() == Promise.Status.Cancelled then\r\n\t\t\t\t\tcancel()\r\n\t\t\t\t\treturn reject(Error.new({\r\n\t\t\t\t\t\terror = \"Promise is cancelled\",\r\n\t\t\t\t\t\tkind = Error.Kind.AlreadyCancelled,\r\n\t\t\t\t\t\tcontext = string.format(\r\n\t\t\t\t\t\t\t\"The Promise that was part of the array at index %d passed into Promise.each was already cancelled when Promise.each began.\\n\\nThat Promise was created at:\\n\\n%s\",\r\n\t\t\t\t\t\t\tindex,\r\n\t\t\t\t\t\t\tvalue._source\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t}))\r\n\t\t\t\telseif value:getStatus() == Promise.Status.Rejected then\r\n\t\t\t\t\tcancel()\r\n\t\t\t\t\treturn reject(select(2, value:await()))\r\n\t\t\t\tend\r\n\r\n\t\t\t\t-- Chain a new Promise from this one so we only cancel ours\r\n\t\t\t\tlocal ourPromise = value:andThen(function(...)\r\n\t\t\t\t\treturn ...\r\n\t\t\t\tend)\r\n\r\n\t\t\t\ttable.insert(promisesToCancel, ourPromise)\r\n\t\t\t\tpreprocessedList[index] = ourPromise\r\n\t\t\telse\r\n\t\t\t\tpreprocessedList[index] = value\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tfor index, value in ipairs(preprocessedList) do\r\n\t\t\tif Promise.is(value) then\r\n\t\t\t\tlocal success\r\n\t\t\t\tsuccess, value = value:await()\r\n\r\n\t\t\t\tif not success then\r\n\t\t\t\t\tcancel()\r\n\t\t\t\t\treturn reject(value)\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tif cancelled then\r\n\t\t\t\treturn\r\n\t\t\tend\r\n\r\n\t\t\tlocal predicatePromise = Promise.resolve(predicate(value, index))\r\n\r\n\t\t\ttable.insert(promisesToCancel, predicatePromise)\r\n\r\n\t\t\tlocal success, result = predicatePromise:await()\r\n\r\n\t\t\tif not success then\r\n\t\t\t\tcancel()\r\n\t\t\t\treturn reject(result)\r\n\t\t\tend\r\n\r\n\t\t\tresults[index] = result\r\n\t\tend\r\n\r\n\t\tresolve(results)\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tChecks whether the given object is a Promise via duck typing. This only checks if the object is a table and has an `andThen` method.\r\n\r\n\t@param object any\r\n\t@return boolean -- `true` if the given `object` is a Promise.\r\n]=]\r\nfunction Promise.is(object)\r\n\tif type(object) ~= \"table\" then\r\n\t\treturn false\r\n\tend\r\n\r\n\tlocal objectMetatable = getmetatable(object)\r\n\r\n\tif objectMetatable == Promise then\r\n\t\t-- The Promise came from this library.\r\n\t\treturn true\r\n\telseif objectMetatable == nil then\r\n\t\t-- No metatable, but we should still chain onto tables with andThen methods\r\n\t\treturn type(object.andThen) == \"function\"\r\n\telseif\r\n\t\ttype(objectMetatable) == \"table\"\r\n\t\tand type(rawget(objectMetatable, \"__index\")) == \"table\"\r\n\t\tand type(rawget(rawget(objectMetatable, \"__index\"), \"andThen\")) == \"function\"\r\n\tthen\r\n\t\t-- Maybe this came from a different or older Promise library.\r\n\t\treturn true\r\n\tend\r\n\r\n\treturn false\r\nend\r\n\r\n--[=[\r\n\tWraps a function that yields into one that returns a Promise.\r\n\r\n\tAny errors that occur while executing the function will be turned into rejections.\r\n\r\n\t:::info\r\n\t`Promise.promisify` is similar to [Promise.try](#try), except the callback is returned as a callable function instead of being invoked immediately.\r\n\t:::\r\n\r\n\t```lua\r\n\tlocal sleep = Promise.promisify(wait)\r\n\r\n\tsleep(1):andThen(print)\r\n\t```\r\n\r\n\t```lua\r\n\tlocal isPlayerInGroup = Promise.promisify(function(player, groupId)\r\n\t\treturn player:IsInGroup(groupId)\r\n\tend)\r\n\t```\r\n\r\n\t@param callback (...: any) -> ...any\r\n\t@return (...: any) -> Promise\r\n]=]\r\nfunction Promise.promisify(callback)\r\n\treturn function(...)\r\n\t\treturn Promise._try(debug.traceback(nil, 2), callback, ...)\r\n\tend\r\nend\r\n\r\n--[=[\r\n\tReturns a Promise that resolves after `seconds` seconds have passed. The Promise resolves with the actual amount of time that was waited.\r\n\r\n\tThis function is **not** a wrapper around `wait`. `Promise.delay` uses a custom scheduler which provides more accurate timing. As an optimization, cancelling this Promise instantly removes the task from the scheduler.\r\n\r\n\t:::warning\r\n\tPassing `NaN`, infinity, or a number less than 1/60 is equivalent to passing 1/60.\r\n\t:::\r\n\r\n\t```lua\r\n\t\tPromise.delay(5):andThenCall(print, \"This prints after 5 seconds\")\r\n\t```\r\n\r\n\t@function delay\r\n\t@within Promise\r\n\t@param seconds number\r\n\t@return Promise\r\n]=]\r\ndo\r\n\t-- uses a sorted doubly linked list (queue) to achieve O(1) remove operations and O(n) for insert\r\n\r\n\t-- the initial node in the linked list\r\n\tlocal first\r\n\tlocal connection\r\n\r\n\tfunction Promise.delay(seconds)\r\n\t\tassert(type(seconds) == \"number\", \"Bad argument #1 to Promise.delay, must be a number.\")\r\n\t\t-- If seconds is -INF, INF, NaN, or less than 1 / 60, assume seconds is 1 / 60.\r\n\t\t-- This mirrors the behavior of wait()\r\n\t\tif not (seconds >= 1 / 60) or seconds == math.huge then\r\n\t\t\tseconds = 1 / 60\r\n\t\tend\r\n\r\n\t\treturn Promise._new(debug.traceback(nil, 2), function(resolve, _, onCancel)\r\n\t\t\tlocal startTime = Promise._getTime()\r\n\t\t\tlocal endTime = startTime + seconds\r\n\r\n\t\t\tlocal node = {\r\n\t\t\t\tresolve = resolve,\r\n\t\t\t\tstartTime = startTime,\r\n\t\t\t\tendTime = endTime,\r\n\t\t\t}\r\n\r\n\t\t\tif connection == nil then -- first is nil when connection is nil\r\n\t\t\t\tfirst = node\r\n\t\t\t\tconnection = Promise._timeEvent:Connect(function()\r\n\t\t\t\t\tlocal threadStart = Promise._getTime()\r\n\r\n\t\t\t\t\twhile first ~= nil and first.endTime < threadStart do\r\n\t\t\t\t\t\tlocal current = first\r\n\t\t\t\t\t\tfirst = current.next\r\n\r\n\t\t\t\t\t\tif first == nil then\r\n\t\t\t\t\t\t\tconnection:Disconnect()\r\n\t\t\t\t\t\t\tconnection = nil\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\tfirst.previous = nil\r\n\t\t\t\t\t\tend\r\n\r\n\t\t\t\t\t\tcurrent.resolve(Promise._getTime() - current.startTime)\r\n\t\t\t\t\tend\r\n\t\t\t\tend)\r\n\t\t\telse -- first is non-nil\r\n\t\t\t\tif first.endTime < endTime then -- if `node` should be placed after `first`\r\n\t\t\t\t\t-- we will insert `node` between `current` and `next`\r\n\t\t\t\t\t-- (i.e. after `current` if `next` is nil)\r\n\t\t\t\t\tlocal current = first\r\n\t\t\t\t\tlocal next = current.next\r\n\r\n\t\t\t\t\twhile next ~= nil and next.endTime < endTime do\r\n\t\t\t\t\t\tcurrent = next\r\n\t\t\t\t\t\tnext = current.next\r\n\t\t\t\t\tend\r\n\r\n\t\t\t\t\t-- `current` must be non-nil, but `next` could be `nil` (i.e. last item in list)\r\n\t\t\t\t\tcurrent.next = node\r\n\t\t\t\t\tnode.previous = current\r\n\r\n\t\t\t\t\tif next ~= nil then\r\n\t\t\t\t\t\tnode.next = next\r\n\t\t\t\t\t\tnext.previous = node\r\n\t\t\t\t\tend\r\n\t\t\t\telse\r\n\t\t\t\t\t-- set `node` to `first`\r\n\t\t\t\t\tnode.next = first\r\n\t\t\t\t\tfirst.previous = node\r\n\t\t\t\t\tfirst = node\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tonCancel(function()\r\n\t\t\t\t-- remove node from queue\r\n\t\t\t\tlocal next = node.next\r\n\r\n\t\t\t\tif first == node then\r\n\t\t\t\t\tif next == nil then -- if `node` is the first and last\r\n\t\t\t\t\t\tconnection:Disconnect()\r\n\t\t\t\t\t\tconnection = nil\r\n\t\t\t\t\telse -- if `node` is `first` and not the last\r\n\t\t\t\t\t\tnext.previous = nil\r\n\t\t\t\t\tend\r\n\t\t\t\t\tfirst = next\r\n\t\t\t\telse\r\n\t\t\t\t\tlocal previous = node.previous\r\n\t\t\t\t\t-- since `node` is not `first`, then we know `previous` is non-nil\r\n\t\t\t\t\tprevious.next = next\r\n\r\n\t\t\t\t\tif next ~= nil then\r\n\t\t\t\t\t\tnext.previous = previous\r\n\t\t\t\t\tend\r\n\t\t\t\tend\r\n\t\t\tend)\r\n\t\tend)\r\n\tend\r\nend\r\n\r\n--[=[\r\n\tReturns a new Promise that resolves if the chained Promise resolves within `seconds` seconds, or rejects if execution time exceeds `seconds`. The chained Promise will be cancelled if the timeout is reached.\r\n\r\n\tRejects with `rejectionValue` if it is non-nil. If a `rejectionValue` is not given, it will reject with a `Promise.Error(Promise.Error.Kind.TimedOut)`. This can be checked with [[Error.isKind]].\r\n\r\n\t```lua\r\n\tgetSomething():timeout(5):andThen(function(something)\r\n\t\t-- got something and it only took at max 5 seconds\r\n\tend):catch(function(e)\r\n\t\t-- Either getting something failed or the time was exceeded.\r\n\r\n\t\tif Promise.Error.isKind(e, Promise.Error.Kind.TimedOut) then\r\n\t\t\twarn(\"Operation timed out!\")\r\n\t\telse\r\n\t\t\twarn(\"Operation encountered an error!\")\r\n\t\tend\r\n\tend)\r\n\t```\r\n\r\n\tSugar for:\r\n\r\n\t```lua\r\n\tPromise.race({\r\n\t\tPromise.delay(seconds):andThen(function()\r\n\t\t\treturn Promise.reject(\r\n\t\t\t\trejectionValue == nil\r\n\t\t\t\tand Promise.Error.new({ kind = Promise.Error.Kind.TimedOut })\r\n\t\t\t\tor rejectionValue\r\n\t\t\t)\r\n\t\tend),\r\n\t\tpromise\r\n\t})\r\n\t```\r\n\r\n\t@param seconds number\r\n\t@param rejectionValue? any -- The value to reject with if the timeout is reached\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:timeout(seconds, rejectionValue)\r\n\tlocal traceback = debug.traceback(nil, 2)\r\n\r\n\treturn Promise.race({\r\n\t\tPromise.delay(seconds):andThen(function()\r\n\t\t\treturn Promise.reject(rejectionValue == nil and Error.new({\r\n\t\t\t\tkind = Error.Kind.TimedOut,\r\n\t\t\t\terror = \"Timed out\",\r\n\t\t\t\tcontext = string.format(\r\n\t\t\t\t\t\"Timeout of %d seconds exceeded.\\n:timeout() called at:\\n\\n%s\",\r\n\t\t\t\t\tseconds,\r\n\t\t\t\t\ttraceback\r\n\t\t\t\t),\r\n\t\t\t}) or rejectionValue)\r\n\t\tend),\r\n\t\tself,\r\n\t})\r\nend\r\n\r\n--[=[\r\n\tReturns the current Promise status.\r\n\r\n\t@return Status\r\n]=]\r\nfunction Promise.prototype:getStatus()\r\n\treturn self._status\r\nend\r\n\r\n--[[\r\n\tCreates a new promise that receives the result of this promise.\r\n\r\n\tThe given callbacks are invoked depending on that result.\r\n]]\r\nfunction Promise.prototype:_andThen(traceback, successHandler, failureHandler)\r\n\tself._unhandledRejection = false\r\n\r\n\t-- Create a new promise to follow this part of the chain\r\n\treturn Promise._new(traceback, function(resolve, reject)\r\n\t\t-- Our default callbacks just pass values onto the next promise.\r\n\t\t-- This lets success and failure cascade correctly!\r\n\r\n\t\tlocal successCallback = resolve\r\n\t\tif successHandler then\r\n\t\t\tsuccessCallback = createAdvancer(\r\n\t\t\t\ttraceback,\r\n\t\t\t\tsuccessHandler,\r\n\t\t\t\tresolve,\r\n\t\t\t\treject\r\n\t\t\t)\r\n\t\tend\r\n\r\n\t\tlocal failureCallback = reject\r\n\t\tif failureHandler then\r\n\t\t\tfailureCallback = createAdvancer(\r\n\t\t\t\ttraceback,\r\n\t\t\t\tfailureHandler,\r\n\t\t\t\tresolve,\r\n\t\t\t\treject\r\n\t\t\t)\r\n\t\tend\r\n\r\n\t\tif self._status == Promise.Status.Started then\r\n\t\t\t-- If we haven't resolved yet, put ourselves into the queue\r\n\t\t\ttable.insert(self._queuedResolve, successCallback)\r\n\t\t\ttable.insert(self._queuedReject, failureCallback)\r\n\t\telseif self._status == Promise.Status.Resolved then\r\n\t\t\t-- This promise has already resolved! Trigger success immediately.\r\n\t\t\tsuccessCallback(unpack(self._values, 1, self._valuesLength))\r\n\t\telseif self._status == Promise.Status.Rejected then\r\n\t\t\t-- This promise died a terrible death! Trigger failure immediately.\r\n\t\t\tfailureCallback(unpack(self._values, 1, self._valuesLength))\r\n\t\telseif self._status == Promise.Status.Cancelled then\r\n\t\t\t-- We don't want to call the success handler or the failure handler,\r\n\t\t\t-- we just reject this promise outright.\r\n\t\t\treject(Error.new({\r\n\t\t\t\terror = \"Promise is cancelled\",\r\n\t\t\t\tkind = Error.Kind.AlreadyCancelled,\r\n\t\t\t\tcontext = \"Promise created at\\n\\n\" .. traceback,\r\n\t\t\t}))\r\n\t\tend\r\n\tend, self)\r\nend\r\n\r\n--[=[\r\n\tChains onto an existing Promise and returns a new Promise.\r\n\r\n\t:::warning\r\n\tWithin the failure handler, you should never assume that the rejection value is a string. Some rejections within the Promise library are represented by [[Error]] objects. If you want to treat it as a string for debugging, you should call `tostring` on it first.\r\n\t:::\r\n\r\n\tReturn a Promise from the success or failure handler and it will be chained onto.\r\n\r\n\t@param successHandler (...: any) -> ...any\r\n\t@param failureHandler? (...: any) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:andThen(successHandler, failureHandler)\r\n\tassert(\r\n\t\tsuccessHandler == nil or type(successHandler) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:andThen\")\r\n\t)\r\n\tassert(\r\n\t\tfailureHandler == nil or type(failureHandler) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:andThen\")\r\n\t)\r\n\r\n\treturn self:_andThen(debug.traceback(nil, 2), successHandler, failureHandler)\r\nend\r\n\r\n--[=[\r\n\tShorthand for `Promise:andThen(nil, failureHandler)`.\r\n\r\n\tReturns a Promise that resolves if the `failureHandler` worked without encountering an additional error.\r\n\r\n\t:::warning\r\n\tWithin the failure handler, you should never assume that the rejection value is a string. Some rejections within the Promise library are represented by [[Error]] objects. If you want to treat it as a string for debugging, you should call `tostring` on it first.\r\n\t:::\r\n\r\n\r\n\t@param failureHandler (...: any) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:catch(failureCallback)\r\n\tassert(\r\n\t\tfailureCallback == nil or type(failureCallback) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:catch\")\r\n\t)\r\n\treturn self:_andThen(debug.traceback(nil, 2), nil, failureCallback)\r\nend\r\n\r\n--[=[\r\n\tSimilar to [Promise.andThen](#andThen), except the return value is the same as the value passed to the handler. In other words, you can insert a `:tap` into a Promise chain without affecting the value that downstream Promises receive.\r\n\r\n\t```lua\r\n\t\tgetTheValue()\r\n\t\t:tap(print)\r\n\t\t:andThen(function(theValue)\r\n\t\t\tprint(\"Got\", theValue, \"even though print returns nil!\")\r\n\t\tend)\r\n\t```\r\n\r\n\tIf you return a Promise from the tap handler callback, its value will be discarded but `tap` will still wait until it resolves before passing the original value through.\r\n\r\n\t@param tapHandler (...: any) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:tap(tapCallback)\r\n\tassert(type(tapCallback) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise:tap\"))\r\n\treturn self:_andThen(debug.traceback(nil, 2), function(...)\r\n\t\tlocal callbackReturn = tapCallback(...)\r\n\r\n\t\tif Promise.is(callbackReturn) then\r\n\t\t\tlocal length, values = pack(...)\r\n\t\t\treturn callbackReturn:andThen(function()\r\n\t\t\t\treturn unpack(values, 1, length)\r\n\t\t\tend)\r\n\t\tend\r\n\r\n\t\treturn ...\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAttaches an `andThen` handler to this Promise that calls the given callback with the predefined arguments. The resolved value is discarded.\r\n\r\n\t```lua\r\n\t\tpromise:andThenCall(someFunction, \"some\", \"arguments\")\r\n\t```\r\n\r\n\tThis is sugar for\r\n\r\n\t```lua\r\n\t\tpromise:andThen(function()\r\n\t\treturn someFunction(\"some\", \"arguments\")\r\n\t\tend)\r\n\t```\r\n\r\n\t@param callback (...: any) -> any\r\n\t@param ...? any -- Additional arguments which will be passed to `callback`\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:andThenCall(callback, ...)\r\n\tassert(type(callback) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise:andThenCall\"))\r\n\tlocal length, values = pack(...)\r\n\treturn self:_andThen(debug.traceback(nil, 2), function()\r\n\t\treturn callback(unpack(values, 1, length))\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAttaches an `andThen` handler to this Promise that discards the resolved value and returns the given value from it.\r\n\r\n\t```lua\r\n\t\tpromise:andThenReturn(\"some\", \"values\")\r\n\t```\r\n\r\n\tThis is sugar for\r\n\r\n\t```lua\r\n\t\tpromise:andThen(function()\r\n\t\t\treturn \"some\", \"values\"\r\n\t\tend)\r\n\t```\r\n\r\n\t:::caution\r\n\tPromises are eager, so if you pass a Promise to `andThenReturn`, it will begin executing before `andThenReturn` is reached in the chain. Likewise, if you pass a Promise created from [[Promise.reject]] into `andThenReturn`, it's possible that this will trigger the unhandled rejection warning. If you need to return a Promise, it's usually best practice to use [[Promise.andThen]].\r\n\t:::\r\n\r\n\t@param ... any -- Values to return from the function\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:andThenReturn(...)\r\n\tlocal length, values = pack(...)\r\n\treturn self:_andThen(debug.traceback(nil, 2), function()\r\n\t\treturn unpack(values, 1, length)\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tCancels this promise, preventing the promise from resolving or rejecting. Does not do anything if the promise is already settled.\r\n\r\n\tCancellations will propagate upwards and downwards through chained promises.\r\n\r\n\tPromises will only be cancelled if all of their consumers are also cancelled. This is to say that if you call `andThen` twice on the same promise, and you cancel only one of the child promises, it will not cancel the parent promise until the other child promise is also cancelled.\r\n\r\n\t```lua\r\n\t\tpromise:cancel()\r\n\t```\r\n]=]\r\nfunction Promise.prototype:cancel()\r\n\tif self._status ~= Promise.Status.Started then\r\n\t\treturn\r\n\tend\r\n\r\n\tself._status = Promise.Status.Cancelled\r\n\r\n\tif self._cancellationHook then\r\n\t\tself._cancellationHook()\r\n\tend\r\n\r\n\tif self._parent then\r\n\t\tself._parent:_consumerCancelled(self)\r\n\tend\r\n\r\n\tfor child in pairs(self._consumers) do\r\n\t\tchild:cancel()\r\n\tend\r\n\r\n\tself:_finalize()\r\nend\r\n\r\n--[[\r\n\tUsed to decrease the number of consumers by 1, and if there are no more,\r\n\tcancel this promise.\r\n]]\r\nfunction Promise.prototype:_consumerCancelled(consumer)\r\n\tif self._status ~= Promise.Status.Started then\r\n\t\treturn\r\n\tend\r\n\r\n\tself._consumers[consumer] = nil\r\n\r\n\tif next(self._consumers) == nil then\r\n\t\tself:cancel()\r\n\tend\r\nend\r\n\r\n--[[\r\n\tUsed to set a handler for when the promise resolves, rejects, or is\r\n\tcancelled. Returns a new promise chained from this promise.\r\n]]\r\nfunction Promise.prototype:_finally(traceback, finallyHandler, onlyOk)\r\n\tif not onlyOk then\r\n\t\tself._unhandledRejection = false\r\n\tend\r\n\r\n\t-- Return a promise chained off of this promise\r\n\treturn Promise._new(traceback, function(resolve, reject)\r\n\t\tlocal finallyCallback = resolve\r\n\t\tif finallyHandler then\r\n\t\t\tfinallyCallback = createAdvancer(\r\n\t\t\t\ttraceback,\r\n\t\t\t\tfinallyHandler,\r\n\t\t\t\tresolve,\r\n\t\t\t\treject\r\n\t\t\t)\r\n\t\tend\r\n\r\n\t\tif onlyOk then\r\n\t\t\tlocal callback = finallyCallback\r\n\t\t\tfinallyCallback = function(...)\r\n\t\t\t\tif self._status == Promise.Status.Rejected then\r\n\t\t\t\t\treturn resolve(self)\r\n\t\t\t\tend\r\n\r\n\t\t\t\treturn callback(...)\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\tif self._status == Promise.Status.Started then\r\n\t\t\t-- The promise is not settled, so queue this.\r\n\t\t\ttable.insert(self._queuedFinally, finallyCallback)\r\n\t\telse\r\n\t\t\t-- The promise already settled or was cancelled, run the callback now.\r\n\t\t\tfinallyCallback(self._status)\r\n\t\tend\r\n\tend, self)\r\nend\r\n\r\n--[=[\r\n\tSet a handler that will be called regardless of the promise's fate. The handler is called when the promise is resolved, rejected, *or* cancelled.\r\n\r\n\tReturns a new promise chained from this promise.\r\n\r\n\t:::caution\r\n\tIf the Promise is cancelled, any Promises chained off of it with `andThen` won't run. Only Promises chained with `finally` or `done` will run in the case of cancellation.\r\n\t:::\r\n\r\n\t```lua\r\n\tlocal thing = createSomething()\r\n\r\n\tdoSomethingWith(thing)\r\n\t\t:andThen(function()\r\n\t\t\tprint(\"It worked!\")\r\n\t\t\t-- do something..\r\n\t\tend)\r\n\t\t:catch(function()\r\n\t\t\twarn(\"Oh no it failed!\")\r\n\t\tend)\r\n\t\t:finally(function()\r\n\t\t\t-- either way, destroy thing\r\n\r\n\t\t\tthing:Destroy()\r\n\t\tend)\r\n\r\n\t```\r\n\r\n\t@param finallyHandler (status: Status) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:finally(finallyHandler)\r\n\tassert(\r\n\t\tfinallyHandler == nil or type(finallyHandler) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:finally\")\r\n\t)\r\n\treturn self:_finally(debug.traceback(nil, 2), finallyHandler)\r\nend\r\n\r\n--[=[\r\n\tSame as `andThenCall`, except for `finally`.\r\n\r\n\tAttaches a `finally` handler to this Promise that calls the given callback with the predefined arguments.\r\n\r\n\t@param callback (...: any) -> any\r\n\t@param ...? any -- Additional arguments which will be passed to `callback`\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:finallyCall(callback, ...)\r\n\tassert(type(callback) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise:finallyCall\"))\r\n\tlocal length, values = pack(...)\r\n\treturn self:_finally(debug.traceback(nil, 2), function()\r\n\t\treturn callback(unpack(values, 1, length))\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tAttaches a `finally` handler to this Promise that discards the resolved value and returns the given value from it.\r\n\r\n\t```lua\r\n\t\tpromise:finallyReturn(\"some\", \"values\")\r\n\t```\r\n\r\n\tThis is sugar for\r\n\r\n\t```lua\r\n\t\tpromise:finally(function()\r\n\t\t\treturn \"some\", \"values\"\r\n\t\tend)\r\n\t```\r\n\r\n\t@param ... any -- Values to return from the function\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:finallyReturn(...)\r\n\tlocal length, values = pack(...)\r\n\treturn self:_finally(debug.traceback(nil, 2), function()\r\n\t\treturn unpack(values, 1, length)\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tSet a handler that will be called only if the Promise resolves or is cancelled. This method is similar to `finally`, except it doesn't catch rejections.\r\n\r\n\t:::caution\r\n\t`done` should be reserved specifically when you want to perform some operation after the Promise is finished (like `finally`), but you don't want to consume rejections (like in this example). You should use `andThen` instead if you only care about the Resolved case.\r\n\t:::\r\n\r\n\t:::warning\r\n\tLike `finally`, if the Promise is cancelled, any Promises chained off of it with `andThen` won't run. Only Promises chained with `done` and `finally` will run in the case of cancellation.\r\n\t:::\r\n\r\n\tReturns a new promise chained from this promise.\r\n\r\n\t@param doneHandler (status: Status) -> ...any\r\n\t@return Promise<...any>\r\n]=]\r\nfunction Promise.prototype:done(finallyHandler)\r\n\tassert(\r\n\t\tfinallyHandler == nil or type(finallyHandler) == \"function\",\r\n\t\tstring.format(ERROR_NON_FUNCTION, \"Promise:done\")\r\n\t)\r\n\treturn self:_finally(debug.traceback(nil, 2), finallyHandler, true)\r\nend\r\n\r\n--[=[\r\n\tSame as `andThenCall`, except for `done`.\r\n\r\n\tAttaches a `done` handler to this Promise that calls the given callback with the predefined arguments.\r\n\r\n\t@param callback (...: any) -> any\r\n\t@param ...? any -- Additional arguments which will be passed to `callback`\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:doneCall(callback, ...)\r\n\tassert(type(callback) == \"function\", string.format(ERROR_NON_FUNCTION, \"Promise:doneCall\"))\r\n\tlocal length, values = pack(...)\r\n\treturn self:_finally(debug.traceback(nil, 2), function()\r\n\t\treturn callback(unpack(values, 1, length))\r\n\tend, true)\r\nend\r\n\r\n--[=[\r\n\tAttaches a `done` handler to this Promise that discards the resolved value and returns the given value from it.\r\n\r\n\t```lua\r\n\t\tpromise:doneReturn(\"some\", \"values\")\r\n\t```\r\n\r\n\tThis is sugar for\r\n\r\n\t```lua\r\n\t\tpromise:done(function()\r\n\t\t\treturn \"some\", \"values\"\r\n\t\tend)\r\n\t```\r\n\r\n\t@param ... any -- Values to return from the function\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:doneReturn(...)\r\n\tlocal length, values = pack(...)\r\n\treturn self:_finally(debug.traceback(nil, 2), function()\r\n\t\treturn unpack(values, 1, length)\r\n\tend, true)\r\nend\r\n\r\n--[=[\r\n\tYields the current thread until the given Promise completes. Returns the Promise's status, followed by the values that the promise resolved or rejected with.\r\n\r\n\t@yields\r\n\t@return Status -- The Status representing the fate of the Promise\r\n\t@return ...any -- The values the Promise resolved or rejected with.\r\n]=]\r\nfunction Promise.prototype:awaitStatus()\r\n\tself._unhandledRejection = false\r\n\r\n\tif self._status == Promise.Status.Started then\r\n\t\tlocal bindable = Instance.new(\"BindableEvent\")\r\n\r\n\t\tself:finally(function()\r\n\t\t\tbindable:Fire()\r\n\t\tend)\r\n\r\n\t\tbindable.Event:Wait()\r\n\t\tbindable:Destroy()\r\n\tend\r\n\r\n\tif self._status == Promise.Status.Resolved then\r\n\t\treturn self._status, unpack(self._values, 1, self._valuesLength)\r\n\telseif self._status == Promise.Status.Rejected then\r\n\t\treturn self._status, unpack(self._values, 1, self._valuesLength)\r\n\tend\r\n\r\n\treturn self._status\r\nend\r\n\r\nlocal function awaitHelper(status, ...)\r\n\treturn status == Promise.Status.Resolved, ...\r\nend\r\n\r\n--[=[\r\n\tYields the current thread until the given Promise completes. Returns true if the Promise resolved, followed by the values that the promise resolved or rejected with.\r\n\r\n\t:::caution\r\n\tIf the Promise gets cancelled, this function will return `false`, which is indistinguishable from a rejection. If you need to differentiate, you should use [[Promise.awaitStatus]] instead.\r\n\t:::\r\n\r\n\t```lua\r\n\t\tlocal worked, value = getTheValue():await()\r\n\r\n\tif worked then\r\n\t\tprint(\"got\", value)\r\n\telse\r\n\t\twarn(\"it failed\")\r\n\tend\r\n\t```\r\n\r\n\t@yields\r\n\t@return boolean -- `true` if the Promise successfully resolved\r\n\t@return ...any -- The values the Promise resolved or rejected with.\r\n]=]\r\nfunction Promise.prototype:await()\r\n\treturn awaitHelper(self:awaitStatus())\r\nend\r\n\r\nlocal function expectHelper(status, ...)\r\n\tif status ~= Promise.Status.Resolved then\r\n\t\terror((...) == nil and \"Expected Promise rejected with no value.\" or (...), 3)\r\n\tend\r\n\r\n\treturn ...\r\nend\r\n\r\n--[=[\r\n\tYields the current thread until the given Promise completes. Returns the the values that the promise resolved with.\r\n\r\n\t```lua\r\n\tlocal worked = pcall(function()\r\n\t\tprint(\"got\", getTheValue():expect())\r\n\tend)\r\n\r\n\tif not worked then\r\n\t\twarn(\"it failed\")\r\n\tend\r\n\t```\r\n\r\n\tThis is essentially sugar for:\r\n\r\n\t```lua\r\n\tselect(2, assert(promise:await()))\r\n\t```\r\n\r\n\t**Errors** if the Promise rejects or gets cancelled.\r\n\r\n\t@error any -- Errors with the rejection value if this Promise rejects or gets cancelled.\r\n\t@yields\r\n\t@return ...any -- The values the Promise resolved with.\r\n]=]\r\nfunction Promise.prototype:expect()\r\n\treturn expectHelper(self:awaitStatus())\r\nend\r\n\r\n-- Backwards compatibility\r\nPromise.prototype.awaitValue = Promise.prototype.expect\r\n\r\n--[[\r\n\tIntended for use in tests.\r\n\r\n\tSimilar to await(), but instead of yielding if the promise is unresolved,\r\n\t_unwrap will throw. This indicates an assumption that a promise has\r\n\tresolved.\r\n]]\r\nfunction Promise.prototype:_unwrap()\r\n\tif self._status == Promise.Status.Started then\r\n\t\terror(\"Promise has not resolved or rejected.\", 2)\r\n\tend\r\n\r\n\tlocal success = self._status == Promise.Status.Resolved\r\n\r\n\treturn success, unpack(self._values, 1, self._valuesLength)\r\nend\r\n\r\nfunction Promise.prototype:_resolve(...)\r\n\tif self._status ~= Promise.Status.Started then\r\n\t\tif Promise.is((...)) then\r\n\t\t\t(...):_consumerCancelled(self)\r\n\t\tend\r\n\t\treturn\r\n\tend\r\n\r\n\t-- If the resolved value was a Promise, we chain onto it!\r\n\tif Promise.is((...)) then\r\n\t\t-- Without this warning, arguments sometimes mysteriously disappear\r\n\t\tif select(\"#\", ...) > 1 then\r\n\t\t\tlocal message = string.format(\r\n\t\t\t\t\"When returning a Promise from andThen, extra arguments are \" ..\r\n\t\t\t\t\"discarded! See:\\n\\n%s\",\r\n\t\t\t\tself._source\r\n\t\t\t)\r\n\t\t\twarn(message)\r\n\t\tend\r\n\r\n\t\tlocal chainedPromise = ...\r\n\r\n\t\tlocal promise = chainedPromise:andThen(\r\n\t\t\tfunction(...)\r\n\t\t\t\tself:_resolve(...)\r\n\t\t\tend,\r\n\t\t\tfunction(...)\r\n\t\t\t\tlocal maybeRuntimeError = chainedPromise._values[1]\r\n\r\n\t\t\t\t-- Backwards compatibility < v2\r\n\t\t\t\tif chainedPromise._error then\r\n\t\t\t\t\tmaybeRuntimeError = Error.new({\r\n\t\t\t\t\t\terror = chainedPromise._error,\r\n\t\t\t\t\t\tkind = Error.Kind.ExecutionError,\r\n\t\t\t\t\t\tcontext = \"[No stack trace available as this Promise originated from an older version of the Promise library (< v2)]\",\r\n\t\t\t\t\t})\r\n\t\t\t\tend\r\n\r\n\t\t\t\tif Error.isKind(maybeRuntimeError, Error.Kind.ExecutionError) then\r\n\t\t\t\t\treturn self:_reject(maybeRuntimeError:extend({\r\n\t\t\t\t\t\terror = \"This Promise was chained to a Promise that errored.\",\r\n\t\t\t\t\t\ttrace = \"\",\r\n\t\t\t\t\t\tcontext = string.format(\r\n\t\t\t\t\t\t\t\"The Promise at:\\n\\n%s\\n...Rejected because it was chained to the following Promise, which encountered an error:\\n\",\r\n\t\t\t\t\t\t\tself._source\r\n\t\t\t\t\t\t),\r\n\t\t\t\t\t}))\r\n\t\t\t\tend\r\n\r\n\t\t\t\tself:_reject(...)\r\n\t\t\tend\r\n\t\t)\r\n\r\n\t\tif promise._status == Promise.Status.Cancelled then\r\n\t\t\tself:cancel()\r\n\t\telseif promise._status == Promise.Status.Started then\r\n\t\t\t-- Adopt ourselves into promise for cancellation propagation.\r\n\t\t\tself._parent = promise\r\n\t\t\tpromise._consumers[self] = true\r\n\t\tend\r\n\r\n\t\treturn\r\n\tend\r\n\r\n\tself._status = Promise.Status.Resolved\r\n\tself._valuesLength, self._values = pack(...)\r\n\r\n\t-- We assume that these callbacks will not throw errors.\r\n\tfor _, callback in ipairs(self._queuedResolve) do\r\n\t\tcoroutine.wrap(callback)(...)\r\n\tend\r\n\r\n\tself:_finalize()\r\nend\r\n\r\nfunction Promise.prototype:_reject(...)\r\n\tif self._status ~= Promise.Status.Started then\r\n\t\treturn\r\n\tend\r\n\r\n\tself._status = Promise.Status.Rejected\r\n\tself._valuesLength, self._values = pack(...)\r\n\r\n\t-- If there are any rejection handlers, call those!\r\n\tif not isEmpty(self._queuedReject) then\r\n\t\t-- We assume that these callbacks will not throw errors.\r\n\t\tfor _, callback in ipairs(self._queuedReject) do\r\n\t\t\tcoroutine.wrap(callback)(...)\r\n\t\tend\r\n\telse\r\n\t\t-- At this point, no one was able to observe the error.\r\n\t\t-- An error handler might still be attached if the error occurred\r\n\t\t-- synchronously. We'll wait one tick, and if there are still no\r\n\t\t-- observers, then we should put a message in the console.\r\n\r\n\t\tlocal err = tostring((...))\r\n\r\n\t\tcoroutine.wrap(function()\r\n\t\t\tPromise._timeEvent:Wait()\r\n\r\n\t\t\t-- Someone observed the error, hooray!\r\n\t\t\tif not self._unhandledRejection then\r\n\t\t\t\treturn\r\n\t\t\tend\r\n\r\n\t\t\t-- Build a reasonable message\r\n\t\t\tlocal message = string.format(\r\n\t\t\t\t\"Unhandled Promise rejection:\\n\\n%s\\n\\n%s\",\r\n\t\t\t\terr,\r\n\t\t\t\tself._source\r\n\t\t\t)\r\n\r\n\t\t\tif Promise.TEST then\r\n\t\t\t\t-- Don't spam output when we're running tests.\r\n\t\t\t\treturn\r\n\t\t\tend\r\n\r\n\t\t\twarn(message)\r\n\t\tend)()\r\n\tend\r\n\r\n\tself:_finalize()\r\nend\r\n\r\n--[[\r\n\tCalls any :finally handlers. We need this to be a separate method and\r\n\tqueue because we must call all of the finally callbacks upon a success,\r\n\tfailure, *and* cancellation.\r\n]]\r\nfunction Promise.prototype:_finalize()\r\n\tfor _, callback in ipairs(self._queuedFinally) do\r\n\t\t-- Purposefully not passing values to callbacks here, as it could be the\r\n\t\t-- resolved values, or rejected errors. If the developer needs the values,\r\n\t\t-- they should use :andThen or :catch explicitly.\r\n\t\tcoroutine.wrap(callback)(self._status)\r\n\tend\r\n\r\n\tself._queuedFinally = nil\r\n\tself._queuedReject = nil\r\n\tself._queuedResolve = nil\r\n\r\n\t-- Clear references to other Promises to allow gc\r\n\tif not Promise.TEST then\r\n\t\tself._parent = nil\r\n\t\tself._consumers = nil\r\n\tend\r\nend\r\n\r\n--[=[\r\n\tChains a Promise from this one that is resolved if this Promise is already resolved, and rejected if it is not resolved at the time of calling `:now()`. This can be used to ensure your `andThen` handler occurs on the same frame as the root Promise execution.\r\n\r\n\t```lua\r\n\tdoSomething()\r\n\t\t:now()\r\n\t\t:andThen(function(value)\r\n\t\t\tprint(\"Got\", value, \"synchronously.\")\r\n\t\tend)\r\n\t```\r\n\r\n\tIf this Promise is still running, Rejected, or Cancelled, the Promise returned from `:now()` will reject with the `rejectionValue` if passed, otherwise with a `Promise.Error(Promise.Error.Kind.NotResolvedInTime)`. This can be checked with [[Error.isKind]].\r\n\r\n\t@param rejectionValue? any -- The value to reject with if the Promise isn't resolved\r\n\t@return Promise\r\n]=]\r\nfunction Promise.prototype:now(rejectionValue)\r\n\tlocal traceback = debug.traceback(nil, 2)\r\n\tif self._status == Promise.Status.Resolved then\r\n\t\treturn self:_andThen(traceback, function(...)\r\n\t\t\treturn ...\r\n\t\tend)\r\n\telse\r\n\t\treturn Promise.reject(rejectionValue == nil and Error.new({\r\n\t\t\tkind = Error.Kind.NotResolvedInTime,\r\n\t\t\terror = \"This Promise was not resolved in time for :now()\",\r\n\t\t\tcontext = \":now() was called at:\\n\\n\" .. traceback,\r\n\t\t}) or rejectionValue)\r\n\tend\r\nend\r\n\r\n--[=[\r\n\tRepeatedly calls a Promise-returning function up to `times` number of times, until the returned Promise resolves.\r\n\r\n\tIf the amount of retries is exceeded, the function will return the latest rejected Promise.\r\n\r\n\t```lua\r\n\tlocal function canFail(a, b, c)\r\n\t\treturn Promise.new(function(resolve, reject)\r\n\t\t\t-- do something that can fail\r\n\r\n\t\t\tlocal failed, thing = doSomethingThatCanFail(a, b, c)\r\n\r\n\t\t\tif failed then\r\n\t\t\t\treject(\"it failed\")\r\n\t\t\telse\r\n\t\t\t\tresolve(thing)\r\n\t\t\tend\r\n\t\tend)\r\n\tend\r\n\r\n\tlocal MAX_RETRIES = 10\r\n\tlocal value = Promise.retry(canFail, MAX_RETRIES, \"foo\", \"bar\", \"baz\") -- args to send to canFail\r\n\t```\r\n\r\n\t@since 3.0.0\r\n\t@param callback (...: P) -> Promise\r\n\t@param times number\r\n\t@param ...? P\r\n]=]\r\nfunction Promise.retry(callback, times, ...)\r\n\tassert(type(callback) == \"function\", \"Parameter #1 to Promise.retry must be a function\")\r\n\tassert(type(times) == \"number\", \"Parameter #2 to Promise.retry must be a number\")\r\n\r\n\tlocal args, length = {...}, select(\"#\", ...)\r\n\r\n\treturn Promise.resolve(callback(...)):catch(function(...)\r\n\t\tif times > 0 then\r\n\t\t\treturn Promise.retry(callback, times - 1, unpack(args, 1, length))\r\n\t\telse\r\n\t\t\treturn Promise.reject(...)\r\n\t\tend\r\n\tend)\r\nend\r\n\r\n--[=[\r\n\tConverts an event into a Promise which resolves the next time the event fires.\r\n\r\n\tThe optional `predicate` callback, if passed, will receive the event arguments and should return `true` or `false`, based on if this fired event should resolve the Promise or not. If `true`, the Promise resolves. If `false`, nothing happens and the predicate will be rerun the next time the event fires.\r\n\r\n\tThe Promise will resolve with the event arguments.\r\n\r\n\t:::tip\r\n\tThis function will work given any object with a `Connect` method. This includes all Roblox events.\r\n\t:::\r\n\r\n\t```lua\r\n\t-- Creates a Promise which only resolves when `somePart` is touched\r\n\t-- by a part named `\"Something specific\"`.\r\n\treturn Promise.fromEvent(somePart.Touched, function(part)\r\n\t\treturn part.Name == \"Something specific\"\r\n\tend)\r\n\t```\r\n\r\n\t@since 3.0.0\r\n\t@param event Event -- Any object with a `Connect` method. This includes all Roblox events.\r\n\t@param predicate? (...: P) -> boolean -- A function which determines if the Promise should resolve with the given value, or wait for the next event to check again.\r\n\t@return Promise

\r\n]=]\r\nfunction Promise.fromEvent(event, predicate)\r\n\tpredicate = predicate or function()\r\n\t\treturn true\r\n\tend\r\n\r\n\treturn Promise._new(debug.traceback(nil, 2), function(resolve, _, onCancel)\r\n\t\tlocal connection\r\n\t\tlocal shouldDisconnect = false\r\n\r\n\t\tlocal function disconnect()\r\n\t\t\tconnection:Disconnect()\r\n\t\t\tconnection = nil\r\n\t\tend\r\n\r\n\t\t-- We use shouldDisconnect because if the callback given to Connect is called before\r\n\t\t-- Connect returns, connection will still be nil. This happens with events that queue up\r\n\t\t-- events when there's nothing connected, such as RemoteEvents\r\n\r\n\t\tconnection = event:Connect(function(...)\r\n\t\t\tlocal callbackValue = predicate(...)\r\n\r\n\t\t\tif callbackValue == true then\r\n\t\t\t\tresolve(...)\r\n\r\n\t\t\t\tif connection then\r\n\t\t\t\t\tdisconnect()\r\n\t\t\t\telse\r\n\t\t\t\t\tshouldDisconnect = true\r\n\t\t\t\tend\r\n\t\t\telseif type(callbackValue) ~= \"boolean\" then\r\n\t\t\t\terror(\"Promise.fromEvent predicate should always return a boolean\")\r\n\t\t\tend\r\n\t\tend)\r\n\r\n\t\tif shouldDisconnect and connection then\r\n\t\t\treturn disconnect()\r\n\t\tend\r\n\r\n\t\tonCancel(disconnect)\r\n\tend)\r\nend\r\n\r\nreturn Promise\r\n"}},"Children":["6957f7983ac08acabf224266f365d3f7"],"Metadata":{"ignoreUnknownInstances":false}},"133a9b005fbea6beac1d059ddc9fef0e":{"Id":"133a9b005fbea6beac1d059ddc9fef0e","Parent":"d539d2b3547c9166dae5ffd367a37cb3","Name":"ContextBlock","ClassName":"ModuleScript","Properties":{"Source":{"String":"local t = require(script.Parent.Parent.Parent.t)\n\nlocal IContext = require(script.Parent.IContext)\ntype IContext = IContext.IContext\n\nlocal isContextBlock = t.interface({\n\tRemote = t.instanceIsA(\"RemoteEvent\"),\n\tContext = t.any,\n\tActions = t.interface({\n\t\t[t.string] = t.interface({ t.callback }),\n\t}),\n})\n\nexport type ContextBlock = {\n\tRemote: RemoteEvent,\n\tContext: IContext,\n\tActions: {\n\t\t[string]: { () -> () },\n\t},\n}\n\nreturn function(obj)\n\treturn isContextBlock(obj) :: boolean\nend\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"99ea57650081417fd256b7092ccdba19":{"Id":"99ea57650081417fd256b7092ccdba19","Parent":"c39e26776de082e6222fc839fa8b1b48","Name":"ts","ClassName":"ModuleScript","Properties":{"Source":{"String":"-- t: a runtime typechecker for Roblox\r\n\r\n-- regular lua compatibility\r\nlocal typeof = typeof or type\r\n\r\nlocal function primitive(typeName)\r\n\treturn function(value)\r\n\t\tlocal valueType = typeof(value)\r\n\t\tif valueType == typeName then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\nlocal t = {}\r\n\r\n--[[**\r\n\tmatches any type except nil\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.any(value)\r\n\tif value ~= nil then\r\n\t\treturn true\r\n\telse\r\n\t\treturn false\r\n\tend\r\nend\r\n\r\n--Lua primitives\r\n\r\n--[[**\r\n\tensures Lua primitive boolean type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.boolean = primitive(\"boolean\")\r\n\r\n--[[**\r\n\tensures Lua primitive thread type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.thread = primitive(\"thread\")\r\n\r\n--[[**\r\n\tensures Lua primitive callback type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.callback = primitive(\"function\")\r\nt[\"function\"] = t.callback\r\n\r\n--[[**\r\n\tensures Lua primitive none type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.none = primitive(\"nil\")\r\nt[\"nil\"] = t.none\r\n\r\n--[[**\r\n\tensures Lua primitive string type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.string = primitive(\"string\")\r\n\r\n--[[**\r\n\tensures Lua primitive table type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.table = primitive(\"table\")\r\n\r\n--[[**\r\n\tensures Lua primitive userdata type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.userdata = primitive(\"userdata\")\r\n\r\n--[[**\r\n\tensures value is a number and non-NaN\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.number(value)\r\n\tlocal valueType = typeof(value)\r\n\tif valueType == \"number\" then\r\n\t\tif value == value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\telse\r\n\t\treturn false\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is NaN\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.nan(value)\r\n\tlocal valueType = typeof(value)\r\n\tif valueType == \"number\" then\r\n\t\tif value ~= value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\telse\r\n\t\treturn false\r\n\tend\r\nend\r\n\r\n-- roblox types\r\n\r\n--[[**\r\n\tensures Roblox Axes type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Axes = primitive(\"Axes\")\r\n\r\n--[[**\r\n\tensures Roblox BrickColor type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.BrickColor = primitive(\"BrickColor\")\r\n\r\n--[[**\r\n\tensures Roblox CFrame type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.CFrame = primitive(\"CFrame\")\r\n\r\n--[[**\r\n\tensures Roblox Color3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Color3 = primitive(\"Color3\")\r\n\r\n--[[**\r\n\tensures Roblox ColorSequence type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.ColorSequence = primitive(\"ColorSequence\")\r\n\r\n--[[**\r\n\tensures Roblox ColorSequenceKeypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.ColorSequenceKeypoint = primitive(\"ColorSequenceKeypoint\")\r\n\r\n--[[**\r\n\tensures Roblox DockWidgetPluginGuiInfo type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.DockWidgetPluginGuiInfo = primitive(\"DockWidgetPluginGuiInfo\")\r\n\r\n--[[**\r\n\tensures Roblox Faces type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Faces = primitive(\"Faces\")\r\n\r\n--[[**\r\n\tensures Roblox Instance type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Instance = primitive(\"Instance\")\r\n\r\n--[[**\r\n\tensures Roblox NumberRange type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberRange = primitive(\"NumberRange\")\r\n\r\n--[[**\r\n\tensures Roblox NumberSequence type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberSequence = primitive(\"NumberSequence\")\r\n\r\n--[[**\r\n\tensures Roblox NumberSequenceKeypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberSequenceKeypoint = primitive(\"NumberSequenceKeypoint\")\r\n\r\n--[[**\r\n\tensures Roblox PathWaypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.PathWaypoint = primitive(\"PathWaypoint\")\r\n\r\n--[[**\r\n\tensures Roblox PhysicalProperties type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.PhysicalProperties = primitive(\"PhysicalProperties\")\r\n\r\n--[[**\r\n\tensures Roblox Random type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Random = primitive(\"Random\")\r\n\r\n--[[**\r\n\tensures Roblox Ray type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Ray = primitive(\"Ray\")\r\n\r\n--[[**\r\n\tensures Roblox Rect type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Rect = primitive(\"Rect\")\r\n\r\n--[[**\r\n\tensures Roblox Region3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Region3 = primitive(\"Region3\")\r\n\r\n--[[**\r\n\tensures Roblox Region3int16 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Region3int16 = primitive(\"Region3int16\")\r\n\r\n--[[**\r\n\tensures Roblox TweenInfo type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.TweenInfo = primitive(\"TweenInfo\")\r\n\r\n--[[**\r\n\tensures Roblox UDim type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.UDim = primitive(\"UDim\")\r\n\r\n--[[**\r\n\tensures Roblox UDim2 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.UDim2 = primitive(\"UDim2\")\r\n\r\n--[[**\r\n\tensures Roblox Vector2 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector2 = primitive(\"Vector2\")\r\n\r\n--[[**\r\n\tensures Roblox Vector3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector3 = primitive(\"Vector3\")\r\n\r\n--[[**\r\n\tensures Roblox Vector3int16 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector3int16 = primitive(\"Vector3int16\")\r\n\r\n-- roblox enum types\r\n\r\n--[[**\r\n\tensures Roblox Enum type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Enum = primitive(\"Enum\")\r\n\r\n--[[**\r\n\tensures Roblox EnumItem type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.EnumItem = primitive(\"EnumItem\")\r\n\r\n--[[**\r\n\tensures Roblox RBXScriptSignal type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.RBXScriptSignal = primitive(\"RBXScriptSignal\")\r\n\r\n--[[**\r\n\tensures Roblox RBXScriptConnection type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.RBXScriptConnection = primitive(\"RBXScriptConnection\")\r\n\r\n--[[**\r\n\tensures value is a given literal value\r\n\r\n\t@param literal The literal to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.literal(...)\r\n\tlocal size = select(\"#\", ...)\r\n\tif size == 1 then\r\n\t\tlocal literal = ...\r\n\t\treturn function(value)\r\n\t\t\tif value ~= literal then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\telse\r\n\t\tlocal literals = {}\r\n\t\tfor i = 1, size do\r\n\t\t\tlocal value = select(i, ...)\r\n\t\t\tliterals[i] = t.literal(value)\r\n\t\tend\r\n\r\n\t\treturn t.union(table.unpack(literals, 1, size))\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tDEPRECATED\r\n\tPlease use t.literal\r\n**--]]\r\nt.exactly = t.literal\r\n\r\n--[[**\r\n\tReturns a t.union of each key in the table as a t.literal\r\n\r\n\t@param keyTable The table to get keys from\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.keyOf(keyTable)\r\n\tlocal keys = {}\r\n\tlocal length = 0\r\n\tfor key in pairs(keyTable) do\r\n\t\tlength = length + 1\r\n\t\tkeys[length] = key\r\n\tend\r\n\r\n\treturn t.literal(table.unpack(keys, 1, length))\r\nend\r\n\r\n--[[**\r\n\tReturns a t.union of each value in the table as a t.literal\r\n\r\n\t@param valueTable The table to get values from\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.valueOf(valueTable)\r\n\tlocal values = {}\r\n\tlocal length = 0\r\n\tfor _, value in pairs(valueTable) do\r\n\t\tlength = length + 1\r\n\t\tvalues[length] = value\r\n\tend\r\n\r\n\treturn t.literal(table.unpack(values, 1, length))\r\nend\r\n\r\n--[[**\r\n\tensures value is an integer\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.integer(value)\r\n\tlocal success = t.number(value)\r\n\tif not success then\r\n\t\treturn false\r\n\tend\r\n\r\n\tif value % 1 == 0 then\r\n\t\treturn true\r\n\telse\r\n\t\treturn false\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min <= value\r\n\r\n\t@param min The minimum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMin(min)\r\n\treturn function(value)\r\n\t\tlocal success = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value >= min then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value <= max\r\n\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMax(max)\r\n\treturn function(value)\r\n\t\tlocal success = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value <= max then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min < value\r\n\r\n\t@param min The minimum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMinExclusive(min)\r\n\treturn function(value)\r\n\t\tlocal success = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif min < value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value < max\r\n\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMaxExclusive(max)\r\n\treturn function(value)\r\n\t\tlocal success = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value < max then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value > 0\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nt.numberPositive = t.numberMinExclusive(0)\r\n\r\n--[[**\r\n\tensures value is a number where value < 0\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nt.numberNegative = t.numberMaxExclusive(0)\r\n\r\n--[[**\r\n\tensures value is a number where min <= value <= max\r\n\r\n\t@param min The minimum to use\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberConstrained(min, max)\r\n\tassert(t.number(min))\r\n\tassert(t.number(max))\r\n\tlocal minCheck = t.numberMin(min)\r\n\tlocal maxCheck = t.numberMax(max)\r\n\r\n\treturn function(value)\r\n\t\tlocal minSuccess = minCheck(value)\r\n\t\tif not minSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tlocal maxSuccess = maxCheck(value)\r\n\t\tif not maxSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min < value < max\r\n\r\n\t@param min The minimum to use\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberConstrainedExclusive(min, max)\r\n\tassert(t.number(min))\r\n\tassert(t.number(max))\r\n\tlocal minCheck = t.numberMinExclusive(min)\r\n\tlocal maxCheck = t.numberMaxExclusive(max)\r\n\r\n\treturn function(value)\r\n\t\tlocal minSuccess = minCheck(value)\r\n\t\tif not minSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tlocal maxSuccess = maxCheck(value)\r\n\t\tif not maxSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value matches string pattern\r\n\r\n\t@param string pattern to check against\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.match(pattern)\r\n\tassert(t.string(pattern))\r\n\treturn function(value)\r\n\t\tlocal stringSuccess = t.string(value)\r\n\t\tif not stringSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif string.match(value, pattern) == nil then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is either nil or passes check\r\n\r\n\t@param check The check to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.optional(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tif value == nil then\r\n\t\t\treturn true\r\n\t\tend\r\n\r\n\t\tlocal success = check(value)\r\n\t\tif success then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tmatches given tuple against tuple type definition\r\n\r\n\t@param ... The type definition for the tuples\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.tuple(...)\r\n\tlocal checks = { ... }\r\n\treturn function(...)\r\n\t\tlocal args = { ... }\r\n\t\tfor i, check in ipairs(checks) do\r\n\t\t\tlocal success = check(args[i])\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures all keys in given table pass check\r\n\r\n\t@param check The function to use to check the keys\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.keys(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tlocal tableSuccess = t.table(value)\r\n\t\tif tableSuccess == false then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tfor key in pairs(value) do\r\n\t\t\tlocal success = check(key)\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures all values in given table pass check\r\n\r\n\t@param check The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.values(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tlocal tableSuccess = t.table(value)\r\n\t\tif tableSuccess == false then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tfor _, val in pairs(value) do\r\n\t\t\tlocal success = check(val)\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a table and all keys pass keyCheck and all values pass valueCheck\r\n\r\n\t@param keyCheck The function to use to check the keys\r\n\t@param valueCheck The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.map(keyCheck, valueCheck)\r\n\tassert(t.callback(keyCheck))\r\n\tassert(t.callback(valueCheck))\r\n\tlocal keyChecker = t.keys(keyCheck)\r\n\tlocal valueChecker = t.values(valueCheck)\r\n\r\n\treturn function(value)\r\n\t\tlocal keySuccess = keyChecker(value)\r\n\t\tif not keySuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tlocal valueSuccess = valueChecker(value)\r\n\t\tif not valueSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a table and all keys pass valueCheck and all values are true\r\n\r\n\t@param valueCheck The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.set(valueCheck)\r\n\treturn t.map(valueCheck, t.literal(true))\r\nend\r\n\r\ndo\r\n\tlocal arrayKeysCheck = t.keys(t.integer)\r\n--[[**\r\n\t\tensures value is an array and all values of the array match check\r\n\r\n\t\t@param check The check to compare all values with\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.array(check)\r\n\t\tassert(t.callback(check))\r\n\t\tlocal valuesCheck = t.values(check)\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal keySuccess = arrayKeysCheck(value)\r\n\t\t\tif keySuccess == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\t-- # is unreliable for sparse arrays\r\n\t\t\t-- Count upwards using ipairs to avoid false positives from the behavior of #\r\n\t\t\tlocal arraySize = 0\r\n\r\n\t\t\tfor _ in ipairs(value) do\r\n\t\t\t\tarraySize = arraySize + 1\r\n\t\t\tend\r\n\r\n\t\t\tfor key in pairs(value) do\r\n\t\t\t\tif key < 1 or key > arraySize then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tlocal valueSuccess = valuesCheck(value)\r\n\t\t\tif not valueSuccess then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tensures value is an array of a strict makeup and size\r\n\r\n\t\t@param check The check to compare all values with\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.strictArray(...)\r\n\t\tlocal valueTypes = { ... }\r\n\t\tassert(t.array(t.callback)(valueTypes))\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal keySuccess = arrayKeysCheck(value)\r\n\t\t\tif keySuccess == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\t-- If there's more than the set array size, disallow\r\n\t\t\tif #valueTypes < #value then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\tfor idx, typeFn in pairs(valueTypes) do\r\n\t\t\t\tlocal typeSuccess = typeFn(value[idx])\r\n\t\t\t\tif not typeSuccess then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal callbackArray = t.array(t.callback)\r\n--[[**\r\n\t\tcreates a union type\r\n\r\n\t\t@param ... The checks to union\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.union(...)\r\n\t\tlocal checks = { ... }\r\n\t\tassert(callbackArray(checks))\r\n\r\n\t\treturn function(value)\r\n\t\t\tfor _, check in ipairs(checks) do\r\n\t\t\t\tif check(value) then\r\n\t\t\t\t\treturn true\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tAlias for t.union\r\n\t**--]]\r\n\tt.some = t.union\r\n\r\n--[[**\r\n\t\tcreates an intersection type\r\n\r\n\t\t@param ... The checks to intersect\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.intersection(...)\r\n\t\tlocal checks = { ... }\r\n\t\tassert(callbackArray(checks))\r\n\r\n\t\treturn function(value)\r\n\t\t\tfor _, check in ipairs(checks) do\r\n\t\t\t\tlocal success = check(value)\r\n\t\t\t\tif not success then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tAlias for t.intersection\r\n\t**--]]\r\n\tt.every = t.intersection\r\nend\r\n\r\ndo\r\n\tlocal checkInterface = t.map(t.any, t.callback)\r\n--[[**\r\n\t\tensures value matches given interface definition\r\n\r\n\t\t@param checkTable The interface definition\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.interface(checkTable)\r\n\t\tassert(checkInterface(checkTable))\r\n\t\treturn function(value)\r\n\t\t\tlocal tableSuccess = t.table(value)\r\n\t\t\tif tableSuccess == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\tfor key, check in pairs(checkTable) do\r\n\t\t\t\tlocal success = check(value[key])\r\n\t\t\t\tif success == false then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tensures value matches given interface definition strictly\r\n\r\n\t\t@param checkTable The interface definition\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.strictInterface(checkTable)\r\n\t\tassert(checkInterface(checkTable))\r\n\t\treturn function(value)\r\n\t\t\tlocal tableSuccess = t.table(value)\r\n\t\t\tif tableSuccess == false then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\tfor key, check in pairs(checkTable) do\r\n\t\t\t\tlocal success = check(value[key])\r\n\t\t\t\tif success == false then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tfor key in pairs(value) do\r\n\t\t\t\tif not checkTable[key] then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensure value is an Instance and it's ClassName matches the given ClassName\r\n\r\n\t@param className The class name to check for\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.instanceOf(className, childTable)\r\n\tassert(t.string(className))\r\n\r\n\tlocal childrenCheck\r\n\tif childTable ~= nil then\r\n\t\tchildrenCheck = t.children(childTable)\r\n\tend\r\n\r\n\treturn function(value)\r\n\t\tlocal instanceSuccess = t.Instance(value)\r\n\t\tif not instanceSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value.ClassName ~= className then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif childrenCheck then\r\n\t\t\tlocal childrenSuccess = childrenCheck(value)\r\n\t\t\tif not childrenSuccess then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\nt.instance = t.instanceOf\r\n\r\n--[[**\r\n\tensure value is an Instance and it's ClassName matches the given ClassName by an IsA comparison\r\n\r\n\t@param className The class name to check for\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.instanceIsA(className, childTable)\r\n\tassert(t.string(className))\r\n\r\n\tlocal childrenCheck\r\n\tif childTable ~= nil then\r\n\t\tchildrenCheck = t.children(childTable)\r\n\tend\r\n\r\n\treturn function(value)\r\n\t\tlocal instanceSuccess = t.Instance(value)\r\n\t\tif not instanceSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif not value:IsA(className) then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif childrenCheck then\r\n\t\t\tlocal childrenSuccess = childrenCheck(value)\r\n\t\t\tif not childrenSuccess then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is an enum of the correct type\r\n\r\n\t@param enum The enum to check\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.enum(enum)\r\n\tassert(t.Enum(enum))\r\n\treturn function(value)\r\n\t\tlocal enumItemSuccess = t.EnumItem(value)\r\n\t\tif not enumItemSuccess then\r\n\t\t\treturn false\r\n\t\tend\r\n\r\n\t\tif value.EnumType == enum then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false\r\n\t\tend\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal checkWrap = t.tuple(t.callback, t.callback)\r\n\r\n--[[**\r\n\t\twraps a callback in an assert with checkArgs\r\n\r\n\t\t@param callback The function to wrap\r\n\t\t@param checkArgs The functon to use to check arguments in the assert\r\n\r\n\t\t@returns A function that first asserts using checkArgs and then calls callback\r\n\t**--]]\r\n\tfunction t.wrap(callback, checkArgs)\r\n\t\tassert(checkWrap(callback, checkArgs))\r\n\t\treturn function(...)\r\n\t\t\tassert(checkArgs(...))\r\n\t\t\treturn callback(...)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tasserts a given check\r\n\r\n\t@param check The function to wrap with an assert\r\n\r\n\t@returns A function that simply wraps the given check in an assert\r\n**--]]\r\nfunction t.strict(check)\r\n\treturn function(...)\r\n\t\tassert(check(...))\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal checkChildren = t.map(t.string, t.callback)\r\n\r\n--[[**\r\n\t\tTakes a table where keys are child names and values are functions to check the children against.\r\n\t\tPass an instance tree into the function.\r\n\t\tIf at least one child passes each check, the overall check passes.\r\n\r\n\t\tWarning! If you pass in a tree with more than one child of the same name, this function will always return false\r\n\r\n\t\t@param checkTable The table to check against\r\n\r\n\t\t@returns A function that checks an instance tree\r\n\t**--]]\r\n\tfunction t.children(checkTable)\r\n\t\tassert(checkChildren(checkTable))\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal instanceSuccess = t.Instance(value)\r\n\t\t\tif not instanceSuccess then\r\n\t\t\t\treturn false\r\n\t\t\tend\r\n\r\n\t\t\tlocal childrenByName = {}\r\n\t\t\tfor _, child in ipairs(value:GetChildren()) do\r\n\t\t\t\tlocal name = child.Name\r\n\t\t\t\tif checkTable[name] then\r\n\t\t\t\t\tif childrenByName[name] then\r\n\t\t\t\t\t\treturn false\r\n\t\t\t\t\tend\r\n\r\n\t\t\t\t\tchildrenByName[name] = child\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tfor name, check in pairs(checkTable) do\r\n\t\t\t\tlocal success = check(childrenByName[name])\r\n\t\t\t\tif not success then\r\n\t\t\t\t\treturn false\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\nreturn { t = t }\r\n"}},"Children":[],"Metadata":{"ignoreUnknownInstances":false}},"c39e26776de082e6222fc839fa8b1b48":{"Id":"c39e26776de082e6222fc839fa8b1b48","Parent":"9ee814837a27b11857e89563135cd306","Name":"t","ClassName":"ModuleScript","Properties":{"Source":{"String":"-- t: a runtime typechecker for Roblox\r\n\r\n-- regular lua compatibility\r\nlocal typeof = typeof or type\r\n\r\nlocal function primitive(typeName)\r\n\treturn function(value)\r\n\t\tlocal valueType = typeof(value)\r\n\t\tif valueType == typeName then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"%s expected, got %s\", typeName, valueType)\r\n\t\tend\r\n\tend\r\nend\r\n\r\nlocal t = {}\r\n\r\n--[[**\r\n\tmatches any type except nil\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.any(value)\r\n\tif value ~= nil then\r\n\t\treturn true\r\n\telse\r\n\t\treturn false, \"any expected, got nil\"\r\n\tend\r\nend\r\n\r\n--Lua primitives\r\n\r\n--[[**\r\n\tensures Lua primitive boolean type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.boolean = primitive(\"boolean\")\r\n\r\n--[[**\r\n\tensures Lua primitive thread type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.thread = primitive(\"thread\")\r\n\r\n--[[**\r\n\tensures Lua primitive callback type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.callback = primitive(\"function\")\r\nt[\"function\"] = t.callback\r\n\r\n--[[**\r\n\tensures Lua primitive none type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.none = primitive(\"nil\")\r\nt[\"nil\"] = t.none\r\n\r\n--[[**\r\n\tensures Lua primitive string type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.string = primitive(\"string\")\r\n\r\n--[[**\r\n\tensures Lua primitive table type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.table = primitive(\"table\")\r\n\r\n--[[**\r\n\tensures Lua primitive userdata type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.userdata = primitive(\"userdata\")\r\n\r\n--[[**\r\n\tensures value is a number and non-NaN\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.number(value)\r\n\tlocal valueType = typeof(value)\r\n\tif valueType == \"number\" then\r\n\t\tif value == value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, \"unexpected NaN value\"\r\n\t\tend\r\n\telse\r\n\t\treturn false, string.format(\"number expected, got %s\", valueType)\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is NaN\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.nan(value)\r\n\tlocal valueType = typeof(value)\r\n\tif valueType == \"number\" then\r\n\t\tif value ~= value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, \"unexpected non-NaN value\"\r\n\t\tend\r\n\telse\r\n\t\treturn false, string.format(\"number expected, got %s\", valueType)\r\n\tend\r\nend\r\n\r\n-- roblox types\r\n\r\n--[[**\r\n\tensures Roblox Axes type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Axes = primitive(\"Axes\")\r\n\r\n--[[**\r\n\tensures Roblox BrickColor type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.BrickColor = primitive(\"BrickColor\")\r\n\r\n--[[**\r\n\tensures Roblox CFrame type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.CFrame = primitive(\"CFrame\")\r\n\r\n--[[**\r\n\tensures Roblox Color3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Color3 = primitive(\"Color3\")\r\n\r\n--[[**\r\n\tensures Roblox ColorSequence type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.ColorSequence = primitive(\"ColorSequence\")\r\n\r\n--[[**\r\n\tensures Roblox ColorSequenceKeypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.ColorSequenceKeypoint = primitive(\"ColorSequenceKeypoint\")\r\n\r\n--[[**\r\n\tensures Roblox DockWidgetPluginGuiInfo type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.DockWidgetPluginGuiInfo = primitive(\"DockWidgetPluginGuiInfo\")\r\n\r\n--[[**\r\n\tensures Roblox Faces type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Faces = primitive(\"Faces\")\r\n\r\n--[[**\r\n\tensures Roblox Instance type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Instance = primitive(\"Instance\")\r\n\r\n--[[**\r\n\tensures Roblox NumberRange type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberRange = primitive(\"NumberRange\")\r\n\r\n--[[**\r\n\tensures Roblox NumberSequence type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberSequence = primitive(\"NumberSequence\")\r\n\r\n--[[**\r\n\tensures Roblox NumberSequenceKeypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.NumberSequenceKeypoint = primitive(\"NumberSequenceKeypoint\")\r\n\r\n--[[**\r\n\tensures Roblox PathWaypoint type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.PathWaypoint = primitive(\"PathWaypoint\")\r\n\r\n--[[**\r\n\tensures Roblox PhysicalProperties type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.PhysicalProperties = primitive(\"PhysicalProperties\")\r\n\r\n--[[**\r\n\tensures Roblox Random type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Random = primitive(\"Random\")\r\n\r\n--[[**\r\n\tensures Roblox Ray type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Ray = primitive(\"Ray\")\r\n\r\n--[[**\r\n\tensures Roblox Rect type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Rect = primitive(\"Rect\")\r\n\r\n--[[**\r\n\tensures Roblox Region3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Region3 = primitive(\"Region3\")\r\n\r\n--[[**\r\n\tensures Roblox Region3int16 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Region3int16 = primitive(\"Region3int16\")\r\n\r\n--[[**\r\n\tensures Roblox TweenInfo type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.TweenInfo = primitive(\"TweenInfo\")\r\n\r\n--[[**\r\n\tensures Roblox UDim type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.UDim = primitive(\"UDim\")\r\n\r\n--[[**\r\n\tensures Roblox UDim2 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.UDim2 = primitive(\"UDim2\")\r\n\r\n--[[**\r\n\tensures Roblox Vector2 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector2 = primitive(\"Vector2\")\r\n\r\n--[[**\r\n\tensures Roblox Vector3 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector3 = primitive(\"Vector3\")\r\n\r\n--[[**\r\n\tensures Roblox Vector3int16 type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Vector3int16 = primitive(\"Vector3int16\")\r\n\r\n-- roblox enum types\r\n\r\n--[[**\r\n\tensures Roblox Enum type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.Enum = primitive(\"Enum\")\r\n\r\n--[[**\r\n\tensures Roblox EnumItem type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.EnumItem = primitive(\"EnumItem\")\r\n\r\n--[[**\r\n\tensures Roblox RBXScriptSignal type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.RBXScriptSignal = primitive(\"RBXScriptSignal\")\r\n\r\n--[[**\r\n\tensures Roblox RBXScriptConnection type\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nt.RBXScriptConnection = primitive(\"RBXScriptConnection\")\r\n\r\n--[[**\r\n\tensures value is a given literal value\r\n\r\n\t@param literal The literal to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.literal(...)\r\n\tlocal size = select(\"#\", ...)\r\n\tif size == 1 then\r\n\t\tlocal literal = ...\r\n\t\treturn function(value)\r\n\t\t\tif value ~= literal then\r\n\t\t\t\treturn false, string.format(\"expected %s, got %s\", tostring(literal), tostring(value))\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\telse\r\n\t\tlocal literals = {}\r\n\t\tfor i = 1, size do\r\n\t\t\tlocal value = select(i, ...)\r\n\t\t\tliterals[i] = t.literal(value)\r\n\t\tend\r\n\r\n\t\treturn t.union(table.unpack(literals, 1, size))\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tDEPRECATED\r\n\tPlease use t.literal\r\n**--]]\r\nt.exactly = t.literal\r\n\r\n--[[**\r\n\tReturns a t.union of each key in the table as a t.literal\r\n\r\n\t@param keyTable The table to get keys from\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.keyOf(keyTable)\r\n\tlocal keys = {}\r\n\tlocal length = 0\r\n\tfor key in pairs(keyTable) do\r\n\t\tlength = length + 1\r\n\t\tkeys[length] = key\r\n\tend\r\n\r\n\treturn t.literal(table.unpack(keys, 1, length))\r\nend\r\n\r\n--[[**\r\n\tReturns a t.union of each value in the table as a t.literal\r\n\r\n\t@param valueTable The table to get values from\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.valueOf(valueTable)\r\n\tlocal values = {}\r\n\tlocal length = 0\r\n\tfor _, value in pairs(valueTable) do\r\n\t\tlength = length + 1\r\n\t\tvalues[length] = value\r\n\tend\r\n\r\n\treturn t.literal(table.unpack(values, 1, length))\r\nend\r\n\r\n--[[**\r\n\tensures value is an integer\r\n\r\n\t@param value The value to check against\r\n\r\n\t@returns True iff the condition is satisfied, false otherwise\r\n**--]]\r\nfunction t.integer(value)\r\n\tlocal success, errMsg = t.number(value)\r\n\tif not success then\r\n\t\treturn false, errMsg or \"\"\r\n\tend\r\n\r\n\tif value % 1 == 0 then\r\n\t\treturn true\r\n\telse\r\n\t\treturn false, string.format(\"integer expected, got %s\", value)\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min <= value\r\n\r\n\t@param min The minimum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMin(min)\r\n\treturn function(value)\r\n\t\tlocal success, errMsg = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false, errMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif value >= min then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"number >= %s expected, got %s\", min, value)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value <= max\r\n\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMax(max)\r\n\treturn function(value)\r\n\t\tlocal success, errMsg = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false, errMsg\r\n\t\tend\r\n\r\n\t\tif value <= max then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"number <= %s expected, got %s\", max, value)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min < value\r\n\r\n\t@param min The minimum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMinExclusive(min)\r\n\treturn function(value)\r\n\t\tlocal success, errMsg = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false, errMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif min < value then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"number > %s expected, got %s\", min, value)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value < max\r\n\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberMaxExclusive(max)\r\n\treturn function(value)\r\n\t\tlocal success, errMsg = t.number(value)\r\n\t\tif not success then\r\n\t\t\treturn false, errMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif value < max then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"number < %s expected, got %s\", max, value)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where value > 0\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nt.numberPositive = t.numberMinExclusive(0)\r\n\r\n--[[**\r\n\tensures value is a number where value < 0\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nt.numberNegative = t.numberMaxExclusive(0)\r\n\r\n--[[**\r\n\tensures value is a number where min <= value <= max\r\n\r\n\t@param min The minimum to use\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberConstrained(min, max)\r\n\tassert(t.number(min))\r\n\tassert(t.number(max))\r\n\tlocal minCheck = t.numberMin(min)\r\n\tlocal maxCheck = t.numberMax(max)\r\n\r\n\treturn function(value)\r\n\t\tlocal minSuccess, minErrMsg = minCheck(value)\r\n\t\tif not minSuccess then\r\n\t\t\treturn false, minErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tlocal maxSuccess, maxErrMsg = maxCheck(value)\r\n\t\tif not maxSuccess then\r\n\t\t\treturn false, maxErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a number where min < value < max\r\n\r\n\t@param min The minimum to use\r\n\t@param max The maximum to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.numberConstrainedExclusive(min, max)\r\n\tassert(t.number(min))\r\n\tassert(t.number(max))\r\n\tlocal minCheck = t.numberMinExclusive(min)\r\n\tlocal maxCheck = t.numberMaxExclusive(max)\r\n\r\n\treturn function(value)\r\n\t\tlocal minSuccess, minErrMsg = minCheck(value)\r\n\t\tif not minSuccess then\r\n\t\t\treturn false, minErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tlocal maxSuccess, maxErrMsg = maxCheck(value)\r\n\t\tif not maxSuccess then\r\n\t\t\treturn false, maxErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value matches string pattern\r\n\r\n\t@param string pattern to check against\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.match(pattern)\r\n\tassert(t.string(pattern))\r\n\treturn function(value)\r\n\t\tlocal stringSuccess, stringErrMsg = t.string(value)\r\n\t\tif not stringSuccess then\r\n\t\t\treturn false, stringErrMsg\r\n\t\tend\r\n\r\n\t\tif string.match(value, pattern) == nil then\r\n\t\t\treturn false, string.format(\"%q failed to match pattern %q\", value, pattern)\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is either nil or passes check\r\n\r\n\t@param check The check to use\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.optional(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tif value == nil then\r\n\t\t\treturn true\r\n\t\tend\r\n\r\n\t\tlocal success, errMsg = check(value)\r\n\t\tif success then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"(optional) %s\", errMsg or \"\")\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tmatches given tuple against tuple type definition\r\n\r\n\t@param ... The type definition for the tuples\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.tuple(...)\r\n\tlocal checks = { ... }\r\n\treturn function(...)\r\n\t\tlocal args = { ... }\r\n\t\tfor i, check in ipairs(checks) do\r\n\t\t\tlocal success, errMsg = check(args[i])\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false, string.format(\"Bad tuple index #%s:\\n\\t%s\", i, errMsg or \"\")\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures all keys in given table pass check\r\n\r\n\t@param check The function to use to check the keys\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.keys(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\tif tableSuccess == false then\r\n\t\t\treturn false, tableErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tfor key in pairs(value) do\r\n\t\t\tlocal success, errMsg = check(key)\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false, string.format(\"bad key %s:\\n\\t%s\", tostring(key), errMsg or \"\")\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures all values in given table pass check\r\n\r\n\t@param check The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.values(check)\r\n\tassert(t.callback(check))\r\n\treturn function(value)\r\n\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\tif tableSuccess == false then\r\n\t\t\treturn false, tableErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tfor key, val in pairs(value) do\r\n\t\t\tlocal success, errMsg = check(val)\r\n\t\t\tif success == false then\r\n\t\t\t\treturn false, string.format(\"bad value for key %s:\\n\\t%s\", tostring(key), errMsg or \"\")\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a table and all keys pass keyCheck and all values pass valueCheck\r\n\r\n\t@param keyCheck The function to use to check the keys\r\n\t@param valueCheck The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.map(keyCheck, valueCheck)\r\n\tassert(t.callback(keyCheck))\r\n\tassert(t.callback(valueCheck))\r\n\tlocal keyChecker = t.keys(keyCheck)\r\n\tlocal valueChecker = t.values(valueCheck)\r\n\r\n\treturn function(value)\r\n\t\tlocal keySuccess, keyErr = keyChecker(value)\r\n\t\tif not keySuccess then\r\n\t\t\treturn false, keyErr or \"\"\r\n\t\tend\r\n\r\n\t\tlocal valueSuccess, valueErr = valueChecker(value)\r\n\t\tif not valueSuccess then\r\n\t\t\treturn false, valueErr or \"\"\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is a table and all keys pass valueCheck and all values are true\r\n\r\n\t@param valueCheck The function to use to check the values\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.set(valueCheck)\r\n\treturn t.map(valueCheck, t.literal(true))\r\nend\r\n\r\ndo\r\n\tlocal arrayKeysCheck = t.keys(t.integer)\r\n--[[**\r\n\t\tensures value is an array and all values of the array match check\r\n\r\n\t\t@param check The check to compare all values with\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.array(check)\r\n\t\tassert(t.callback(check))\r\n\t\tlocal valuesCheck = t.values(check)\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal keySuccess, keyErrMsg = arrayKeysCheck(value)\r\n\t\t\tif keySuccess == false then\r\n\t\t\t\treturn false, string.format(\"[array] %s\", keyErrMsg or \"\")\r\n\t\t\tend\r\n\r\n\t\t\t-- # is unreliable for sparse arrays\r\n\t\t\t-- Count upwards using ipairs to avoid false positives from the behavior of #\r\n\t\t\tlocal arraySize = 0\r\n\r\n\t\t\tfor _ in ipairs(value) do\r\n\t\t\t\tarraySize = arraySize + 1\r\n\t\t\tend\r\n\r\n\t\t\tfor key in pairs(value) do\r\n\t\t\t\tif key < 1 or key > arraySize then\r\n\t\t\t\t\treturn false, string.format(\"[array] key %s must be sequential\", tostring(key))\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tlocal valueSuccess, valueErrMsg = valuesCheck(value)\r\n\t\t\tif not valueSuccess then\r\n\t\t\t\treturn false, string.format(\"[array] %s\", valueErrMsg or \"\")\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tensures value is an array of a strict makeup and size\r\n\r\n\t\t@param check The check to compare all values with\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.strictArray(...)\r\n\t\tlocal valueTypes = { ... }\r\n\t\tassert(t.array(t.callback)(valueTypes))\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal keySuccess, keyErrMsg = arrayKeysCheck(value)\r\n\t\t\tif keySuccess == false then\r\n\t\t\t\treturn false, string.format(\"[strictArray] %s\", keyErrMsg or \"\")\r\n\t\t\tend\r\n\r\n\t\t\t-- If there's more than the set array size, disallow\r\n\t\t\tif #valueTypes < #value then\r\n\t\t\t\treturn false, string.format(\"[strictArray] Array size exceeds limit of %d\", #valueTypes)\r\n\t\t\tend\r\n\r\n\t\t\tfor idx, typeFn in pairs(valueTypes) do\r\n\t\t\t\tlocal typeSuccess, typeErrMsg = typeFn(value[idx])\r\n\t\t\t\tif not typeSuccess then\r\n\t\t\t\t\treturn false, string.format(\"[strictArray] Array index #%d - %s\", idx, typeErrMsg)\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal callbackArray = t.array(t.callback)\r\n--[[**\r\n\t\tcreates a union type\r\n\r\n\t\t@param ... The checks to union\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.union(...)\r\n\t\tlocal checks = { ... }\r\n\t\tassert(callbackArray(checks))\r\n\r\n\t\treturn function(value)\r\n\t\t\tfor _, check in ipairs(checks) do\r\n\t\t\t\tif check(value) then\r\n\t\t\t\t\treturn true\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn false, \"bad type for union\"\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tAlias for t.union\r\n\t**--]]\r\n\tt.some = t.union\r\n\r\n--[[**\r\n\t\tcreates an intersection type\r\n\r\n\t\t@param ... The checks to intersect\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.intersection(...)\r\n\t\tlocal checks = { ... }\r\n\t\tassert(callbackArray(checks))\r\n\r\n\t\treturn function(value)\r\n\t\t\tfor _, check in ipairs(checks) do\r\n\t\t\t\tlocal success, errMsg = check(value)\r\n\t\t\t\tif not success then\r\n\t\t\t\t\treturn false, errMsg or \"\"\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tAlias for t.intersection\r\n\t**--]]\r\n\tt.every = t.intersection\r\nend\r\n\r\ndo\r\n\tlocal checkInterface = t.map(t.any, t.callback)\r\n--[[**\r\n\t\tensures value matches given interface definition\r\n\r\n\t\t@param checkTable The interface definition\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.interface(checkTable)\r\n\t\tassert(checkInterface(checkTable))\r\n\t\treturn function(value)\r\n\t\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\t\tif tableSuccess == false then\r\n\t\t\t\treturn false, tableErrMsg or \"\"\r\n\t\t\tend\r\n\r\n\t\t\tfor key, check in pairs(checkTable) do\r\n\t\t\t\tlocal success, errMsg = check(value[key])\r\n\t\t\t\tif success == false then\r\n\t\t\t\t\treturn false, string.format(\"[interface] bad value for %s:\\n\\t%s\", tostring(key), errMsg or \"\")\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\n\r\n--[[**\r\n\t\tensures value matches given interface definition strictly\r\n\r\n\t\t@param checkTable The interface definition\r\n\r\n\t\t@returns A function that will return true iff the condition is passed\r\n\t**--]]\r\n\tfunction t.strictInterface(checkTable)\r\n\t\tassert(checkInterface(checkTable))\r\n\t\treturn function(value)\r\n\t\t\tlocal tableSuccess, tableErrMsg = t.table(value)\r\n\t\t\tif tableSuccess == false then\r\n\t\t\t\treturn false, tableErrMsg or \"\"\r\n\t\t\tend\r\n\r\n\t\t\tfor key, check in pairs(checkTable) do\r\n\t\t\t\tlocal success, errMsg = check(value[key])\r\n\t\t\t\tif success == false then\r\n\t\t\t\t\treturn false, string.format(\"[interface] bad value for %s:\\n\\t%s\", tostring(key), errMsg or \"\")\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tfor key in pairs(value) do\r\n\t\t\t\tif not checkTable[key] then\r\n\t\t\t\t\treturn false, string.format(\"[interface] unexpected field %q\", tostring(key))\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensure value is an Instance and it's ClassName matches the given ClassName\r\n\r\n\t@param className The class name to check for\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.instanceOf(className, childTable)\r\n\tassert(t.string(className))\r\n\r\n\tlocal childrenCheck\r\n\tif childTable ~= nil then\r\n\t\tchildrenCheck = t.children(childTable)\r\n\tend\r\n\r\n\treturn function(value)\r\n\t\tlocal instanceSuccess, instanceErrMsg = t.Instance(value)\r\n\t\tif not instanceSuccess then\r\n\t\t\treturn false, instanceErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif value.ClassName ~= className then\r\n\t\t\treturn false, string.format(\"%s expected, got %s\", className, value.ClassName)\r\n\t\tend\r\n\r\n\t\tif childrenCheck then\r\n\t\t\tlocal childrenSuccess, childrenErrMsg = childrenCheck(value)\r\n\t\t\tif not childrenSuccess then\r\n\t\t\t\treturn false, childrenErrMsg\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\nt.instance = t.instanceOf\r\n\r\n--[[**\r\n\tensure value is an Instance and it's ClassName matches the given ClassName by an IsA comparison\r\n\r\n\t@param className The class name to check for\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.instanceIsA(className, childTable)\r\n\tassert(t.string(className))\r\n\r\n\tlocal childrenCheck\r\n\tif childTable ~= nil then\r\n\t\tchildrenCheck = t.children(childTable)\r\n\tend\r\n\r\n\treturn function(value)\r\n\t\tlocal instanceSuccess, instanceErrMsg = t.Instance(value)\r\n\t\tif not instanceSuccess then\r\n\t\t\treturn false, instanceErrMsg or \"\"\r\n\t\tend\r\n\r\n\t\tif not value:IsA(className) then\r\n\t\t\treturn false, string.format(\"%s expected, got %s\", className, value.ClassName)\r\n\t\tend\r\n\r\n\t\tif childrenCheck then\r\n\t\t\tlocal childrenSuccess, childrenErrMsg = childrenCheck(value)\r\n\t\t\tif not childrenSuccess then\r\n\t\t\t\treturn false, childrenErrMsg\r\n\t\t\tend\r\n\t\tend\r\n\r\n\t\treturn true\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tensures value is an enum of the correct type\r\n\r\n\t@param enum The enum to check\r\n\r\n\t@returns A function that will return true iff the condition is passed\r\n**--]]\r\nfunction t.enum(enum)\r\n\tassert(t.Enum(enum))\r\n\treturn function(value)\r\n\t\tlocal enumItemSuccess, enumItemErrMsg = t.EnumItem(value)\r\n\t\tif not enumItemSuccess then\r\n\t\t\treturn false, enumItemErrMsg\r\n\t\tend\r\n\r\n\t\tif value.EnumType == enum then\r\n\t\t\treturn true\r\n\t\telse\r\n\t\t\treturn false, string.format(\"enum of %s expected, got enum of %s\", tostring(enum), tostring(value.EnumType))\r\n\t\tend\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal checkWrap = t.tuple(t.callback, t.callback)\r\n\r\n--[[**\r\n\t\twraps a callback in an assert with checkArgs\r\n\r\n\t\t@param callback The function to wrap\r\n\t\t@param checkArgs The function to use to check arguments in the assert\r\n\r\n\t\t@returns A function that first asserts using checkArgs and then calls callback\r\n\t**--]]\r\n\tfunction t.wrap(callback, checkArgs)\r\n\t\tassert(checkWrap(callback, checkArgs))\r\n\t\treturn function(...)\r\n\t\t\tassert(checkArgs(...))\r\n\t\t\treturn callback(...)\r\n\t\tend\r\n\tend\r\nend\r\n\r\n--[[**\r\n\tasserts a given check\r\n\r\n\t@param check The function to wrap with an assert\r\n\r\n\t@returns A function that simply wraps the given check in an assert\r\n**--]]\r\nfunction t.strict(check)\r\n\treturn function(...)\r\n\t\tassert(check(...))\r\n\tend\r\nend\r\n\r\ndo\r\n\tlocal checkChildren = t.map(t.string, t.callback)\r\n\r\n--[[**\r\n\t\tTakes a table where keys are child names and values are functions to check the children against.\r\n\t\tPass an instance tree into the function.\r\n\t\tIf at least one child passes each check, the overall check passes.\r\n\r\n\t\tWarning! If you pass in a tree with more than one child of the same name, this function will always return false\r\n\r\n\t\t@param checkTable The table to check against\r\n\r\n\t\t@returns A function that checks an instance tree\r\n\t**--]]\r\n\tfunction t.children(checkTable)\r\n\t\tassert(checkChildren(checkTable))\r\n\r\n\t\treturn function(value)\r\n\t\t\tlocal instanceSuccess, instanceErrMsg = t.Instance(value)\r\n\t\t\tif not instanceSuccess then\r\n\t\t\t\treturn false, instanceErrMsg or \"\"\r\n\t\t\tend\r\n\r\n\t\t\tlocal childrenByName = {}\r\n\t\t\tfor _, child in ipairs(value:GetChildren()) do\r\n\t\t\t\tlocal name = child.Name\r\n\t\t\t\tif checkTable[name] then\r\n\t\t\t\t\tif childrenByName[name] then\r\n\t\t\t\t\t\treturn false, string.format(\"Cannot process multiple children with the same name %q\", name)\r\n\t\t\t\t\tend\r\n\r\n\t\t\t\t\tchildrenByName[name] = child\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\tfor name, check in pairs(checkTable) do\r\n\t\t\t\tlocal success, errMsg = check(childrenByName[name])\r\n\t\t\t\tif not success then\r\n\t\t\t\t\treturn false, string.format(\"[%s.%s] %s\", value:GetFullName(), name, errMsg or \"\")\r\n\t\t\t\tend\r\n\t\t\tend\r\n\r\n\t\t\treturn true\r\n\t\tend\r\n\tend\r\nend\r\n\r\nreturn t\r\n"}},"Children":["d22adc3a9bd7195dae4e3c4ea2612c09","99ea57650081417fd256b7092ccdba19"],"Metadata":{"ignoreUnknownInstances":false}},"9ee814837a27b11857e89563135cd306":{"Id":"9ee814837a27b11857e89563135cd306","Parent":"2e2d4268ad91d40d489844d149b7c87e","Name":"shanebutt_t@1.3.1","ClassName":"Folder","Properties":{},"Children":["c39e26776de082e6222fc839fa8b1b48"],"Metadata":{"ignoreUnknownInstances":false}},"e412d57eace8911b86fabef6e8521d77":{"Id":"e412d57eace8911b86fabef6e8521d77","Parent":"ee222f38fa8be78c47f18fd875ac7854","Name":"Portal","ClassName":"ModuleScript","Properties":{"Source":{"String":"local HttpService: HttpService = game:GetService(\"HttpService\")\nlocal ReplicatedStorage: ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\nlocal RunService: RunService = game:GetService(\"RunService\")\n\nlocal t = require(script.Parent.t)\nlocal types = require(script.Types)\n\nlocal RemoteLocation = \"Portal\"\nlocal Storage: Folder = ReplicatedStorage:FindFirstChild(RemoteLocation) :: Folder\n\nif not Storage then\n\tif RunService:IsServer() then\n\t\tStorage = Instance.new(\"Folder\")\n\t\tStorage.Name = RemoteLocation\n\t\tStorage.Parent = ReplicatedStorage\n\telse\n\t\tStorage = ReplicatedStorage:WaitForChild(RemoteLocation)\n\tend\nend\n\ntype IContext = types.IContext\ntype ISubscription = types.ISubscription\ntype IWormhole = types.IWormhole\n\nlocal Context = require(script.Context)\nlocal Subscription = require(script.Subscription)\nlocal Wormhole = require(script.Wormhole)\n\nlocal Portal = {}\nPortal.Wormhole = Wormhole.new()\n\nfunction Portal:Context(context: string): IContext\n\treturn Portal.Wormhole.addContext(Portal.Wormhole, context)\nend\n\nfunction Portal:Subscription(context: string, action: string, cb: () -> ()?): ISubscription\n\treturn Portal.Wormhole.makeSubscription(Portal.Wormhole, context, action, cb)\nend\n\nfunction Portal:Subscribe(context: string, action: string, cb: () -> ())\n\tlocal subscription: ISubscription = Portal:Subscription(context, action, cb)\n\treturn Portal.Wormhole.doSubscribe(Portal.Wormhole, subscription)\nend\n\nfunction Portal:Publish(context: string, action: string, data: any) end\n\nreturn Portal\n"}},"Children":["2d5696ee5bdf4c8a0a542bf58f63b738","aa5772ae3a91cb8b93b724d7c5a15190","b006666de7a034699290c8f7a42446bf","d539d2b3547c9166dae5ffd367a37cb3","89734f1df997de85fd2bdd427ddf34fb"],"Metadata":{"ignoreUnknownInstances":false}}}}]======] diff --git a/plugin/Packages/msgpack-luau/benchmark/MsgpackMessage.lua b/plugin/Packages/msgpack-luau/benchmark/MsgpackMessage.lua new file mode 100644 index 00000000..d9363a5e --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/MsgpackMessage.lua @@ -0,0 +1 @@ +return '\x83\xA9\x73\x65\x73\x73\x69\x6F\x6E\x49\x64\xD9\x24\x34\x37\x34\x61\x38\x33\x38\x35\x2D\x35\x61\x34\x32\x2D\x34\x64\x39\x36\x2D\x61\x61\x33\x34\x2D\x32\x64\x34\x33\x66\x63\x39\x31\x37\x34\x34\x30\xAD\x6D\x65\x73\x73\x61\x67\x65\x43\x75\x72\x73\x6F\x72\x00\xA9\x69\x6E\x73\x74\x61\x6E\x63\x65\x73\xDE\x00\x1D\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\x87\xA2\x49\x64\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xA5\x54\x79\x70\x65\x73\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x03\x29\x6C\x6F\x63\x61\x6C\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x49\x50\x61\x63\x6B\x61\x67\x65\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x20\x3D\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x2E\x49\x50\x61\x63\x6B\x61\x67\x65\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x68\x65\x63\x6B\x73\x3A\x20\x7B\x20\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x7D\x20\x3D\x20\x7B\x0A\x09\x5B\x22\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x22\x5D\x20\x3D\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x0A\x09\x5B\x22\x69\x73\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x22\x5D\x20\x3D\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0A\x09\x5B\x22\x69\x73\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x22\x5D\x20\x3D\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x0A\x09\x5B\x22\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x22\x5D\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2C\x0A\x09\x5B\x22\x69\x73\x50\x61\x63\x6B\x61\x67\x65\x22\x5D\x20\x3D\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x2C\x0A\x7D\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x43\x68\x65\x63\x6B\x73\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x95\xD9\x20\x31\x33\x33\x61\x39\x62\x30\x30\x35\x66\x62\x65\x61\x36\x62\x65\x61\x63\x31\x64\x30\x35\x39\x64\x64\x63\x39\x66\x65\x66\x30\x65\xD9\x20\x34\x36\x62\x63\x63\x39\x32\x63\x61\x35\x64\x63\x39\x33\x64\x61\x37\x35\x62\x61\x36\x38\x35\x61\x65\x37\x63\x62\x34\x39\x39\x31\xD9\x20\x39\x63\x38\x35\x32\x32\x65\x33\x30\x37\x33\x35\x37\x63\x62\x39\x35\x38\x34\x39\x32\x65\x65\x39\x38\x66\x64\x39\x33\x30\x34\x32\xD9\x20\x36\x39\x37\x38\x61\x31\x38\x38\x33\x35\x38\x64\x36\x34\x62\x66\x62\x32\x31\x30\x33\x37\x31\x32\x32\x30\x32\x61\x39\x39\x32\x32\xD9\x20\x63\x37\x63\x38\x39\x61\x36\x66\x63\x39\x34\x34\x33\x31\x64\x61\x33\x37\x65\x39\x62\x66\x66\x38\x35\x62\x38\x31\x61\x62\x34\x37\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x36\x39\x35\x37\x66\x37\x39\x38\x33\x61\x63\x30\x38\x61\x63\x61\x62\x66\x32\x32\x34\x32\x36\x36\x66\x33\x36\x35\x64\x33\x66\x37\x87\xA2\x49\x64\xD9\x20\x36\x39\x35\x37\x66\x37\x39\x38\x33\x61\x63\x30\x38\x61\x63\x61\x62\x66\x32\x32\x34\x32\x36\x36\x66\x33\x36\x35\x64\x33\x66\x37\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x39\x63\x64\x36\x39\x35\x33\x36\x61\x30\x64\x63\x39\x37\x33\x63\x66\x66\x65\x65\x64\x36\x35\x62\x31\x36\x61\x35\x36\x39\x65\x30\xA4\x4E\x61\x6D\x65\xA9\x69\x6E\x69\x74\x2E\x73\x70\x65\x63\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\xB0\x93\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x29\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x54\x45\x53\x54\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x20\x3D\x20\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x2E\x45\x76\x65\x6E\x74\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6A\x65\x63\x74\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x54\x69\x6D\x65\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x67\x65\x74\x54\x69\x6D\x65\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x6E\x6A\x65\x63\x74\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x54\x69\x6D\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x64\x65\x6C\x74\x61\x29\x0D\x0A\x09\x09\x09\x64\x65\x6C\x74\x61\x20\x3D\x20\x64\x65\x6C\x74\x61\x20\x6F\x72\x20\x28\x31\x2F\x36\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x6E\x6A\x65\x63\x74\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x54\x69\x6D\x65\x20\x3D\x20\x69\x6E\x6A\x65\x63\x74\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x54\x69\x6D\x65\x20\x2B\x20\x64\x65\x6C\x74\x61\x0D\x0A\x09\x09\x09\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x3A\x46\x69\x72\x65\x28\x64\x65\x6C\x74\x61\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x6C\x65\x6E\x2C\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x69\x6E\x64\x65\x78\x69\x6E\x67\x20\x6E\x69\x6C\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x5F\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x77\x72\x6F\x6E\x67\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x6E\x73\x74\x61\x6E\x74\x69\x61\x74\x65\x20\x77\x69\x74\x68\x20\x61\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x6E\x76\x6F\x6B\x65\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x61\x6E\x64\x20\x72\x65\x6A\x65\x63\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x41\x72\x67\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x41\x72\x67\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x41\x72\x67\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x72\x67\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x6F\x6C\x76\x65\x41\x72\x67\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x61\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x41\x72\x67\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x61\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x6F\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x29\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x6F\x6E\x20\x65\x72\x72\x6F\x72\x20\x69\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x68\x61\x68\x61\x68\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x68\x61\x68\x61\x68\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x4C\x6F\x6F\x73\x65\x6C\x79\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x70\x69\x65\x63\x65\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x20\x77\x65\x20\x65\x78\x70\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x69\x6E\x69\x74\x2E\x73\x70\x65\x63\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x6F\x72\x6B\x20\x77\x69\x74\x68\x20\x43\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x74\x69\x63\x6B\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x74\x69\x63\x6B\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x68\x61\x76\x65\x20\x61\x20\x6E\x69\x63\x65\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x29\x3A\x67\x6D\x61\x74\x63\x68\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x28\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x79\x69\x65\x6C\x64\x69\x6E\x67\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x35\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x70\x72\x65\x73\x65\x72\x76\x65\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x73\x20\x6F\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x2D\x63\x68\x61\x69\x6E\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6E\x65\x73\x74\x65\x64\x43\x61\x6C\x6C\x28\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x6E\x65\x73\x74\x65\x64\x43\x61\x6C\x6C\x28\x22\x73\x61\x6D\x70\x6C\x65\x20\x74\x65\x78\x74\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x73\x61\x6D\x70\x6C\x65\x20\x74\x65\x78\x74\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x6E\x65\x73\x74\x65\x64\x43\x61\x6C\x6C\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x72\x75\x6E\x50\x6C\x61\x6E\x4E\x6F\x64\x65\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x2E\x2E\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x74\x20\x77\x61\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x74\x6F\x20\x74\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x68\x69\x63\x68\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x3A\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x65\x72\x72\x6F\x72\x73\x20\x66\x72\x6F\x6D\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x77\x69\x74\x68\x20\x5F\x65\x72\x72\x6F\x72\x20\x28\x3C\x20\x76\x32\x29\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x53\x61\x6D\x70\x6C\x65\x20\x65\x72\x72\x6F\x72\x22\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x53\x61\x6D\x70\x6C\x65\x20\x65\x72\x72\x6F\x72\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x2E\x2E\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x74\x20\x77\x61\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x74\x6F\x20\x74\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x68\x69\x63\x68\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x3A\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x72\x61\x63\x65\x3A\x66\x69\x6E\x64\x28\x22\x25\x5B\x4E\x6F\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x78\x65\x63\x75\x74\x65\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x20\x65\x76\x65\x6E\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x2C\x20\x6E\x6F\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x72\x65\x6A\x65\x63\x74\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x6E\x6F\x74\x68\x69\x6E\x67\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x6E\x69\x6C\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x66\x6F\x72\x20\x64\x65\x6C\x61\x79\x73\x20\x74\x6F\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x20\x20\x20\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x61\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x35\x2C\x20\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x70\x61\x73\x73\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x37\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x37\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x36\x2C\x20\x37\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x37\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x70\x61\x73\x73\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x61\x73\x2D\x69\x73\x20\x61\x73\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x36\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x79\x69\x65\x6C\x64\x69\x6E\x67\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x35\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x75\x6E\x20\x61\x6E\x64\x54\x68\x65\x6E\x73\x20\x6F\x6E\x20\x61\x20\x6E\x65\x77\x20\x74\x68\x72\x65\x61\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x61\x72\x65\x6E\x74\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x5F\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x64\x65\x61\x64\x6C\x6F\x63\x6B\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x70\x61\x72\x65\x6E\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x35\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x70\x61\x72\x65\x6E\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x66\x6F\x6F\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x61\x72\x65\x6E\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x64\x65\x61\x64\x6C\x6F\x63\x6B\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x61\x72\x67\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x6E\x65\x76\x65\x72\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x63\x68\x61\x69\x6E\x65\x64\x2E\x5F\x76\x61\x6C\x75\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x61\x72\x67\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x6E\x65\x76\x65\x72\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x63\x68\x61\x69\x6E\x65\x64\x2E\x5F\x76\x61\x6C\x75\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x6F\x6E\x20\x65\x72\x72\x6F\x72\x20\x69\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x68\x61\x68\x61\x68\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x68\x61\x68\x61\x68\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x4C\x6F\x6F\x73\x65\x6C\x79\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x70\x69\x65\x63\x65\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x20\x77\x65\x20\x65\x78\x70\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x69\x6E\x69\x74\x2E\x73\x70\x65\x63\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x61\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x20\x3D\x20\x7B\x2E\x2E\x2E\x7D\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x6E\x65\x76\x65\x72\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x63\x68\x61\x69\x6E\x65\x64\x2E\x5F\x76\x61\x6C\x75\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x61\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x20\x3D\x20\x7B\x2E\x2E\x2E\x7D\x0D\x0A\x09\x09\x09\x09\x09\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x73\x74\x61\x72\x74\x52\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x61\x64\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x72\x67\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x29\x2E\x6E\x65\x76\x65\x72\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x68\x61\x69\x6E\x65\x64\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x63\x68\x61\x69\x6E\x65\x64\x2E\x5F\x76\x61\x6C\x75\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x73\x20\x74\x68\x72\x6F\x75\x67\x68\x20\x6D\x75\x6C\x74\x69\x70\x6C\x65\x20\x6C\x65\x76\x65\x6C\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x78\x2C\x20\x79\x2C\x20\x7A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x31\x2C\x20\x32\x2C\x20\x33\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x61\x2C\x20\x62\x2C\x20\x63\x29\x0D\x0A\x09\x09\x09\x09\x78\x2C\x20\x79\x2C\x20\x7A\x20\x3D\x20\x61\x2C\x20\x62\x2C\x20\x63\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x78\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x79\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x7A\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6D\x61\x72\x6B\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x20\x74\x68\x65\x6D\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x20\x2D\x2D\x20\x54\x77\x69\x63\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x63\x61\x6C\x6C\x20\x63\x6F\x75\x6E\x74\x73\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x20\x6F\x6E\x63\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x20\x2D\x2D\x20\x54\x77\x69\x63\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x63\x61\x6C\x6C\x20\x63\x6F\x75\x6E\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x66\x66\x65\x63\x74\x20\x64\x6F\x77\x6E\x73\x74\x72\x65\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x74\x72\x61\x63\x6B\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x30\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x31\x20\x3D\x20\x70\x30\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x72\x65\x74\x75\x72\x6E\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x32\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x70\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x33\x20\x3D\x20\x70\x32\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x31\x2E\x5F\x70\x61\x72\x65\x6E\x74\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x65\x71\x75\x61\x6C\x28\x70\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x32\x2E\x5F\x70\x61\x72\x65\x6E\x74\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x65\x71\x75\x61\x6C\x28\x70\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x32\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x70\x33\x5D\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x33\x2E\x5F\x70\x61\x72\x65\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x31\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x32\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x70\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x32\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x31\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x32\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x75\x70\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x72\x20\x63\x61\x6E\x63\x65\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x66\x69\x6E\x61\x6C\x6C\x79\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x3D\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x43\x68\x61\x69\x6E\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x29\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x61\x20\x63\x68\x69\x6C\x64\x20\x6F\x66\x20\x74\x68\x65\x20\x70\x61\x72\x65\x6E\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x31\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x32\x20\x3D\x20\x70\x31\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x32\x2E\x5F\x70\x61\x72\x65\x6E\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x70\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x31\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x70\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x66\x6F\x72\x77\x61\x72\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x20\x3D\x20\x76\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x67\x69\x76\x65\x6E\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x6F\x74\x68\x65\x72\x20\x74\x68\x61\x6E\x20\x61\x20\x74\x61\x62\x6C\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x69\x6E\x73\x74\x61\x6E\x74\x6C\x79\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x65\x6D\x70\x74\x79\x20\x74\x61\x62\x6C\x65\x20\x69\x66\x20\x67\x69\x76\x65\x6E\x20\x6E\x6F\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x7D\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x61\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6E\x65\x78\x74\x28\x76\x61\x6C\x75\x65\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x6E\x69\x6C\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x67\x69\x76\x65\x6E\x20\x6E\x6F\x6E\x2D\x70\x72\x6F\x6D\x69\x73\x65\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x7B\x7D\x2C\x20\x7B\x7D\x2C\x20\x7B\x7D\x7D\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x61\x69\x74\x20\x66\x6F\x72\x20\x61\x6C\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x62\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x69\x72\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x31\x2C\x20\x22\x41\x20\x73\x74\x72\x69\x6E\x67\x22\x2C\x20\x6E\x69\x6C\x2C\x20\x66\x61\x6C\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x69\x20\x3D\x20\x31\x2C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x69\x5D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x73\x5B\x69\x5D\x20\x3D\x20\x7B\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x5B\x69\x5D\x7D\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x72\x65\x73\x6F\x6C\x76\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x5B\x31\x5D\x28\x72\x65\x73\x6F\x6C\x76\x65\x5B\x32\x5D\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x61\x63\x6B\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x3D\x20\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x6F\x6C\x76\x65\x64\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x61\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x72\x65\x73\x6F\x6C\x76\x65\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x69\x20\x3D\x20\x31\x2C\x20\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x6F\x6C\x76\x65\x64\x5B\x69\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x65\x73\x74\x56\x61\x6C\x75\x65\x73\x5B\x69\x5D\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x69\x66\x20\x61\x6E\x79\x20\x69\x6E\x64\x69\x76\x69\x64\x75\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x41\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x42\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x42\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x61\x2C\x20\x62\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x28\x22\x62\x61\x7A\x22\x2C\x20\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x42\x28\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x61\x63\x6B\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x66\x69\x72\x73\x74\x2C\x20\x73\x65\x63\x6F\x6E\x64\x20\x3D\x20\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x72\x73\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x7A\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x65\x63\x6F\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x69\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x66\x74\x65\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6E\x67\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x41\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x42\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x42\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x61\x2C\x20\x62\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x28\x22\x62\x61\x7A\x22\x2C\x20\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x42\x28\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x61\x63\x6B\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x66\x69\x72\x73\x74\x2C\x20\x73\x65\x63\x6F\x6E\x64\x20\x3D\x20\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x72\x73\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x7A\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x65\x63\x6F\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6F\x6E\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x20\x6F\x6E\x63\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x41\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x42\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x42\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x61\x2C\x20\x62\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x41\x28\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x42\x28\x22\x62\x61\x7A\x22\x2C\x20\x22\x71\x75\x78\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x61\x63\x6B\x28\x63\x6F\x6D\x62\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x66\x69\x72\x73\x74\x2C\x20\x73\x65\x63\x6F\x6E\x64\x20\x3D\x20\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x72\x73\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x65\x63\x6F\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x61\x20\x6E\x6F\x6E\x2D\x61\x72\x72\x61\x79\x20\x74\x61\x62\x6C\x65\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x20\x69\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x65\x72\x72\x20\x3D\x20\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6F\x6B\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x65\x72\x72\x3A\x66\x69\x6E\x64\x28\x22\x4E\x6F\x6E\x25\x2D\x70\x72\x6F\x6D\x69\x73\x65\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x6F\x6E\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x29\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x69\x6E\x69\x74\x69\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x69\x73\x20\x65\x6D\x70\x74\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x72\x65\x73\x75\x6C\x74\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x63\x63\x65\x70\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x6D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x75\x6D\x2C\x20\x65\x6C\x65\x6D\x65\x6E\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x73\x75\x6D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x77\x61\x79\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x65\x76\x65\x6E\x20\x69\x66\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x6F\x72\x20\x72\x65\x64\x75\x63\x65\x72\x20\x64\x6F\x6E\x27\x74\x20\x75\x73\x65\x20\x74\x68\x65\x6D\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x6D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x75\x6D\x2C\x20\x65\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x69\x6E\x64\x65\x78\x20\x3D\x3D\x20\x32\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x29\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x73\x75\x6D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x61\x64\x76\x61\x6E\x63\x65\x54\x69\x6D\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x72\x72\x6F\x72\x4D\x65\x73\x73\x61\x67\x65\x20\x3D\x20\x22\x66\x6F\x6F\x22\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x6D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x75\x6D\x2C\x20\x65\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x69\x6E\x64\x65\x78\x20\x3D\x3D\x20\x32\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x65\x72\x72\x6F\x72\x4D\x65\x73\x73\x61\x67\x65\x29\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x73\x75\x6D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x61\x74\x75\x73\x2C\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x73\x75\x6D\x3A\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x74\x61\x74\x75\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x65\x72\x72\x6F\x72\x4D\x65\x73\x73\x61\x67\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x63\x61\x6E\x63\x65\x6C\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x63\x6F\x6E\x64\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x6D\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x75\x6D\x2C\x20\x65\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x69\x6E\x64\x65\x78\x20\x3D\x3D\x20\x31\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x69\x6E\x64\x65\x78\x20\x3D\x3D\x20\x32\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x73\x75\x6D\x20\x2B\x20\x65\x6C\x65\x6D\x65\x6E\x74\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x63\x6F\x6E\x64\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x27\x74\x68\x69\x73\x20\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x72\x75\x6E\x20\x69\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x27\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x73\x75\x6D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x6D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x73\x65\x74\x74\x6C\x65\x64\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x7D\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x6F\x74\x68\x65\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x29\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x61\x20\x6E\x6F\x6E\x2D\x61\x72\x72\x61\x79\x20\x74\x61\x62\x6C\x65\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x20\x69\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x65\x72\x72\x20\x3D\x20\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6F\x6B\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x65\x72\x72\x3A\x66\x69\x6E\x64\x28\x22\x4E\x6F\x6E\x25\x2D\x70\x72\x6F\x6D\x69\x73\x65\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x72\x61\x70\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x65\x73\x74\x28\x6E\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x6E\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x69\x66\x69\x65\x64\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x74\x65\x73\x74\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x69\x66\x69\x65\x64\x28\x31\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x74\x63\x68\x20\x65\x72\x72\x6F\x72\x73\x20\x61\x66\x74\x65\x72\x20\x61\x20\x79\x69\x65\x6C\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x65\x73\x74\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x28\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x27\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x27\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x74\x65\x73\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x61\x70\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x74\x68\x72\x65\x61\x64\x20\x74\x68\x72\x6F\x75\x67\x68\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x72\x73\x74\x2C\x20\x73\x65\x63\x6F\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x76\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x3A\x74\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x76\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x76\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x20\x3D\x20\x76\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x72\x73\x74\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x65\x63\x6F\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x49\x6E\x6E\x65\x72\x2C\x20\x66\x69\x6E\x61\x6C\x56\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x09\x3A\x74\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x49\x6E\x6E\x65\x72\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x29\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x6E\x61\x6C\x56\x61\x6C\x75\x65\x20\x3D\x20\x76\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x6E\x61\x6C\x56\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x49\x6E\x6E\x65\x72\x28\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x69\x6E\x61\x6C\x56\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x74\x63\x68\x20\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x20\x65\x72\x72\x6F\x72\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x72\x72\x6F\x72\x54\x65\x78\x74\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x27\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x27\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x54\x65\x78\x74\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x65\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x65\x72\x72\x6F\x72\x54\x65\x78\x74\x3A\x66\x69\x6E\x64\x28\x22\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x65\x72\x72\x6F\x72\x20\x6F\x62\x6A\x65\x63\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x62\x6A\x65\x63\x74\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x6F\x62\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x6F\x62\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x74\x63\x68\x20\x61\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x20\x65\x72\x72\x6F\x72\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x27\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x27\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x3A\x66\x69\x6E\x64\x28\x22\x65\x72\x72\x6F\x72\x74\x65\x78\x74\x22\x29\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x31\x2C\x20\x76\x61\x6C\x75\x65\x32\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x31\x2C\x20\x32\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x6E\x65\x2C\x20\x74\x77\x6F\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x31\x20\x3D\x20\x6F\x6E\x65\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x32\x20\x3D\x20\x74\x77\x6F\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x31\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x32\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x52\x65\x74\x75\x72\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x31\x2C\x20\x76\x61\x6C\x75\x65\x32\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x64\x6F\x6E\x65\x52\x65\x74\x75\x72\x6E\x28\x31\x2C\x20\x32\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x6E\x65\x2C\x20\x74\x77\x6F\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x31\x20\x3D\x20\x6F\x6E\x65\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x32\x20\x3D\x20\x74\x77\x6F\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x31\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x32\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x74\x68\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x31\x2C\x20\x76\x61\x6C\x75\x65\x32\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x61\x2C\x20\x62\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x31\x20\x3D\x20\x61\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x32\x20\x3D\x20\x62\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x33\x2C\x20\x34\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x31\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x32\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x34\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x43\x61\x6C\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x74\x68\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x31\x2C\x20\x76\x61\x6C\x75\x65\x32\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x3A\x64\x6F\x6E\x65\x43\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x61\x2C\x20\x62\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x31\x20\x3D\x20\x61\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x32\x20\x3D\x20\x62\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x33\x2C\x20\x34\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x31\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x32\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x34\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x74\x72\x69\x67\x67\x65\x72\x20\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x72\x20\x63\x61\x6E\x63\x65\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x76\x65\x72\x2C\x20\x61\x6C\x77\x61\x79\x73\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x3A\x64\x6F\x6E\x65\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x6E\x65\x76\x65\x72\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x61\x6C\x77\x61\x79\x73\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6E\x65\x76\x65\x72\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x6C\x77\x61\x79\x73\x29\x2E\x74\x6F\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x6E\x63\x65\x20\x74\x68\x65\x20\x67\x6F\x61\x6C\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x74\x68\x65\x20\x67\x6F\x61\x6C\x20\x63\x61\x6E\x27\x74\x20\x62\x65\x20\x72\x65\x61\x63\x68\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x29\x20\x72\x65\x6A\x65\x63\x74\x20\x3D\x20\x72\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x6F\x6E\x63\x65\x20\x74\x68\x65\x20\x67\x6F\x61\x6C\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x31\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x32\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x29\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x72\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x6F\x6D\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x70\x65\x6E\x64\x69\x6E\x67\x31\x2C\x0D\x0A\x09\x09\x09\x09\x70\x65\x6E\x64\x69\x6E\x67\x32\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x6F\x6D\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x65\x6E\x64\x69\x6E\x67\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x65\x6E\x64\x69\x6E\x67\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x6F\x6D\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x65\x6E\x64\x69\x6E\x67\x31\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x65\x6E\x64\x69\x6E\x67\x32\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x70\x61\x73\x73\x65\x64\x20\x61\x20\x6E\x6F\x6E\x2D\x6E\x75\x6D\x62\x65\x72\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x7D\x2C\x20\x22\x6E\x6F\x6E\x2D\x6E\x75\x6D\x62\x65\x72\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x2E\x74\x6F\x2E\x74\x68\x72\x6F\x77\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x65\x6D\x70\x74\x79\x20\x61\x72\x72\x61\x79\x20\x69\x66\x20\x61\x6D\x6F\x75\x6E\x74\x20\x69\x73\x20\x30\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x30\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x30\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x72\x65\x74\x75\x72\x6E\x20\x65\x78\x74\x72\x61\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x33\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x34\x29\x2C\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x33\x29\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x0D\x0A\x09\x09\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x65\x72\x72\x6F\x72\x20\x69\x66\x20\x61\x6C\x6C\x20\x61\x72\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x7D\x29\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x53\x74\x61\x74\x75\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x28\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x29\x20\x72\x65\x6A\x65\x63\x74\x20\x3D\x20\x72\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x33\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x34\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x70\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x09\x09\x70\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x31\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x32\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x5B\x33\x5D\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x77\x61\x69\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x35\x2C\x20\x36\x2C\x20\x6E\x69\x6C\x2C\x20\x37\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x2C\x20\x62\x2C\x20\x63\x2C\x20\x64\x2C\x20\x65\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x61\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x62\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x35\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x36\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x6E\x69\x6C\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x37\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x65\x78\x70\x65\x63\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x74\x68\x72\x6F\x77\x20\x74\x68\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x76\x61\x6C\x75\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x6E\x6F\x77\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x22\x66\x6F\x6F\x22\x29\x3A\x6E\x6F\x77\x28\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x3A\x6E\x6F\x77\x28\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x28\x76\x61\x6C\x75\x65\x2C\x20\x22\x4E\x6F\x74\x52\x65\x73\x6F\x6C\x76\x65\x64\x49\x6E\x54\x69\x6D\x65\x22\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x63\x75\x73\x74\x6F\x6D\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x3A\x6E\x6F\x77\x28\x22\x66\x6F\x6F\x22\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x74\x65\x72\x61\x74\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x2C\x20\x22\x71\x75\x78\x22\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x7B\x2E\x2E\x2E\x7D\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x6F\x6B\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x32\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x32\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x32\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x33\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x62\x61\x7A\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x33\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x33\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x34\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x71\x75\x78\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x34\x5D\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x34\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x69\x74\x65\x72\x61\x74\x65\x20\x73\x65\x72\x69\x61\x6C\x6C\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x6F\x72\x20\x30\x29\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x76\x61\x6C\x75\x65\x3A\x75\x70\x70\x65\x72\x28\x29\x29\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x72\x65\x73\x6F\x6C\x76\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x72\x65\x6D\x6F\x76\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x31\x29\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x23\x72\x65\x73\x6F\x6C\x76\x65\x73\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x33\x5D\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x72\x65\x6D\x6F\x76\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x31\x29\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x33\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x72\x65\x6D\x6F\x76\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x31\x29\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x32\x5D\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x6E\x69\x6C\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x46\x4F\x4F\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x42\x41\x52\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x33\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x42\x41\x5A\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x66\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x6F\x6F\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x62\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x61\x6E\x64\x20\x77\x61\x69\x74\x20\x77\x68\x65\x6E\x20\x69\x74\x20\x67\x65\x74\x73\x20\x74\x6F\x20\x74\x68\x65\x6D\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x52\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x6E\x6E\x65\x72\x52\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x20\x2A\x20\x32\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x6E\x6E\x65\x72\x52\x65\x73\x6F\x6C\x76\x65\x28\x32\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x34\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x66\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x65\x64\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x31\x2C\x20\x32\x2C\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x6F\x6F\x62\x61\x72\x22\x29\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x65\x64\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x6E\x65\x76\x65\x72\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x62\x61\x72\x22\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x65\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x69\x66\x20\x74\x68\x65\x72\x65\x27\x73\x20\x61\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x69\x6E\x69\x74\x69\x61\x6C\x6C\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x65\x64\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x31\x2C\x20\x32\x2C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x65\x64\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x65\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x66\x61\x6C\x73\x65\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x2E\x6B\x69\x6E\x64\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x74\x6F\x70\x20\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x6F\x72\x20\x30\x29\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x31\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x63\x61\x6C\x6C\x43\x6F\x75\x6E\x74\x73\x5B\x32\x5D\x29\x2E\x74\x6F\x2E\x6E\x65\x76\x65\x72\x2E\x62\x65\x2E\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x09\x09\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x09\x09\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6E\x63\x65\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x69\x6E\x6E\x65\x72\x50\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x72\x79\x20\x4E\x20\x74\x69\x6D\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x75\x6E\x74\x65\x72\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x29\x0D\x0A\x09\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x63\x6F\x75\x6E\x74\x65\x72\x20\x3D\x20\x63\x6F\x75\x6E\x74\x65\x72\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x6F\x75\x6E\x74\x65\x72\x20\x3D\x3D\x20\x35\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x22\x6F\x6B\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x61\x69\x6C\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x35\x2C\x20\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x6F\x6B\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x6A\x65\x63\x74\x20\x69\x66\x20\x74\x68\x72\x65\x73\x68\x6F\x6C\x64\x20\x69\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x22\x66\x61\x69\x6C\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x20\x35\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x61\x69\x6C\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x6F\x6E\x76\x65\x72\x74\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x74\x6F\x20\x61\x6E\x20\x65\x76\x65\x6E\x74\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x76\x65\x6E\x74\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x28\x65\x76\x65\x6E\x74\x2E\x45\x76\x65\x6E\x74\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x76\x65\x6E\x74\x3A\x46\x69\x72\x65\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x63\x6F\x6E\x76\x65\x72\x74\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x74\x6F\x20\x61\x6E\x20\x65\x76\x65\x6E\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x76\x65\x6E\x74\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x28\x65\x76\x65\x6E\x74\x2E\x45\x76\x65\x6E\x74\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x61\x72\x61\x6D\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x61\x72\x61\x6D\x20\x3D\x3D\x20\x22\x66\x6F\x6F\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x76\x65\x6E\x74\x3A\x46\x69\x72\x65\x28\x22\x62\x61\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x76\x65\x6E\x74\x3A\x46\x69\x72\x65\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x6F\x72\x6B\x20\x77\x69\x74\x68\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x76\x65\x72\x73\x69\x6F\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x6F\x72\x6B\x20\x77\x69\x74\x68\x20\x61\x6E\x79\x20\x6F\x62\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x6E\x64\x54\x68\x65\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x62\x6A\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x61\x6E\x64\x54\x68\x65\x6E\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x31\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x6F\x62\x6A\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x77\x6F\x72\x6B\x20\x77\x69\x74\x68\x20\x6F\x6C\x64\x65\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x7D\x2C\x20\x4F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x65\x78\x70\x65\x63\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x6F\x6C\x64\x50\x72\x6F\x6D\x69\x73\x65\x29\x29\x2E\x74\x6F\x2E\x65\x71\x75\x61\x6C\x28\x74\x72\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x38\x64\x37\x32\x31\x37\x63\x37\x66\x32\x61\x61\x66\x39\x38\x61\x34\x35\x62\x37\x36\x34\x63\x64\x36\x66\x35\x65\x37\x30\x61\x33\x87\xA2\x49\x64\xD9\x20\x38\x64\x37\x32\x31\x37\x63\x37\x66\x32\x61\x61\x66\x39\x38\x61\x34\x35\x62\x37\x36\x34\x63\x64\x36\x66\x35\x65\x37\x30\x61\x33\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA4\x4E\x61\x6D\x65\xA7\x50\x72\x6F\x6D\x69\x73\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xD9\x48\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x5F\x49\x6E\x64\x65\x78\x5B\x22\x65\x76\x61\x65\x72\x61\x5F\x70\x72\x6F\x6D\x69\x73\x65\x40\x33\x2E\x31\x2E\x30\x22\x5D\x5B\x22\x70\x72\x6F\x6D\x69\x73\x65\x22\x5D\x29\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x35\x64\x37\x33\x34\x36\x37\x61\x31\x64\x35\x38\x38\x38\x34\x33\x65\x61\x32\x30\x30\x63\x65\x65\x65\x62\x63\x65\x33\x65\x62\x35\x87\xA2\x49\x64\xD9\x20\x35\x64\x37\x33\x34\x36\x37\x61\x31\x64\x35\x38\x38\x38\x34\x33\x65\x61\x32\x30\x30\x63\x65\x65\x65\x62\x63\x65\x33\x65\x62\x35\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA4\x4E\x61\x6D\x65\xA9\x57\x6F\x72\x6B\x73\x70\x61\x63\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA9\x57\x6F\x72\x6B\x73\x70\x61\x63\x65\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xB0\x46\x69\x6C\x74\x65\x72\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x31\x61\x33\x31\x62\x62\x38\x34\x35\x38\x65\x65\x66\x65\x30\x64\x62\x32\x64\x30\x30\x65\x61\x62\x31\x35\x66\x36\x62\x31\x34\x66\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x33\x62\x34\x33\x37\x36\x63\x62\x65\x65\x38\x39\x66\x65\x33\x33\x31\x30\x33\x62\x30\x65\x36\x37\x34\x35\x39\x37\x63\x30\x65\x61\x87\xA2\x49\x64\xD9\x20\x33\x62\x34\x33\x37\x36\x63\x62\x65\x65\x38\x39\x66\x65\x33\x33\x31\x30\x33\x62\x30\x65\x36\x37\x34\x35\x39\x37\x63\x30\x65\x61\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x61\x61\x35\x37\x37\x32\x61\x65\x33\x61\x39\x31\x63\x62\x38\x62\x39\x33\x62\x37\x32\x34\x64\x37\x63\x35\x61\x31\x35\x31\x39\x30\xA4\x4E\x61\x6D\x65\xB1\x70\x72\x6F\x6D\x69\x73\x65\x41\x77\x61\x69\x74\x56\x61\x6C\x75\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\xAA\x6C\x6F\x63\x61\x6C\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x22\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x61\x63\x6B\x61\x67\x65\x73\x3A\x20\x46\x6F\x6C\x64\x65\x72\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x22\x50\x61\x63\x6B\x61\x67\x65\x73\x22\x29\x20\x3A\x3A\x20\x46\x6F\x6C\x64\x65\x72\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x50\x61\x63\x6B\x61\x67\x65\x73\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x22\x29\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x41\x77\x61\x69\x74\x46\x6F\x72\x56\x61\x6C\x75\x65\x28\x76\x61\x6C\x75\x65\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x6C\x69\x73\x74\x3A\x20\x7B\x20\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x61\x6E\x79\x20\x7D\x29\x3A\x20\x61\x6E\x79\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x3A\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x5F\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0A\x09\x09\x63\x6F\x6E\x6E\x20\x3D\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x2E\x48\x65\x61\x72\x74\x62\x65\x61\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x5F\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x6C\x69\x73\x74\x5B\x76\x61\x6C\x75\x65\x5D\x0A\x09\x09\x09\x69\x66\x20\x5F\x63\x6F\x6E\x74\x65\x78\x74\x20\x74\x68\x65\x6E\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x5F\x63\x6F\x6E\x74\x65\x78\x74\x29\x0A\x09\x09\x09\x65\x6E\x64\x0A\x09\x09\x65\x6E\x64\x29\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0A\x09\x09\x09\x63\x6F\x6E\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0A\x09\x09\x65\x6E\x64\x29\x0A\x09\x65\x6E\x64\x29\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0A\x09\x09\x63\x6F\x6E\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0A\x09\x65\x6E\x64\x29\x0A\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x0A\x65\x6E\x64\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x41\x77\x61\x69\x74\x46\x6F\x72\x56\x61\x6C\x75\x65\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x62\x30\x30\x36\x36\x36\x36\x64\x65\x37\x61\x30\x33\x34\x36\x39\x39\x32\x39\x30\x63\x38\x66\x37\x61\x34\x32\x34\x34\x36\x62\x66\x87\xA2\x49\x64\xD9\x20\x62\x30\x30\x36\x36\x36\x36\x64\x65\x37\x61\x30\x33\x34\x36\x39\x39\x32\x39\x30\x63\x38\x66\x37\x61\x34\x32\x34\x34\x36\x62\x66\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xAC\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\xA9\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x73\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x54\x79\x70\x65\x73\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0D\x0A\x0D\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x6E\x65\x77\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x3F\x29\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x41\x63\x74\x69\x6F\x6E\x20\x3D\x20\x61\x63\x74\x69\x6F\x6E\x2C\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x73\x65\x6C\x66\x2C\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x20\x3A\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x69\x73\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x79\x70\x65\x73\x2E\x69\x73\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x29\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x63\x37\x63\x38\x39\x61\x36\x66\x63\x39\x34\x34\x33\x31\x64\x61\x33\x37\x65\x39\x62\x66\x66\x38\x35\x62\x38\x31\x61\x62\x34\x37\x87\xA2\x49\x64\xD9\x20\x63\x37\x63\x38\x39\x61\x36\x66\x63\x39\x34\x34\x33\x31\x64\x61\x33\x37\x65\x39\x62\x66\x66\x38\x35\x62\x38\x31\x61\x62\x34\x37\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xA9\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x04\x89\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x29\x0D\x0A\x0D\x0A\x74\x79\x70\x65\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x69\x73\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x5F\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x46\x6F\x6C\x64\x65\x72\x22\x29\x2C\x0D\x0A\x09\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x61\x6E\x79\x29\x0D\x0A\x7D\x29\x0D\x0A\x0D\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x7B\x0D\x0A\x09\x5F\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x46\x6F\x6C\x64\x65\x72\x2C\x0D\x0A\x09\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x3A\x20\x7B\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x7D\x2C\x0D\x0A\x0D\x0A\x09\x5F\x5F\x69\x6E\x64\x65\x78\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x0D\x0A\x0D\x0A\x09\x6E\x65\x77\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x20\x2D\x3E\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x0D\x0A\x09\x69\x73\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x2C\x0D\x0A\x0D\x0A\x09\x61\x77\x61\x69\x74\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x3A\x20\x6E\x75\x6D\x62\x65\x72\x3F\x29\x20\x2D\x3E\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2C\x0D\x0A\x09\x61\x64\x64\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x20\x2D\x3E\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x2C\x0D\x0A\x09\x6D\x61\x6B\x65\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x20\x2D\x3E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0D\x0A\x09\x64\x6F\x53\x75\x62\x73\x63\x72\x69\x62\x65\x3A\x20\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x3F\x29\x20\x2D\x3E\x20\x28\x29\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x73\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x28\x6F\x62\x6A\x29\x20\x3A\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0D\x0A\x65\x6E\x64\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x61\x61\x35\x37\x37\x32\x61\x65\x33\x61\x39\x31\x63\x62\x38\x62\x39\x33\x62\x37\x32\x34\x64\x37\x63\x35\x61\x31\x35\x31\x39\x30\x87\xA2\x49\x64\xD9\x20\x61\x61\x35\x37\x37\x32\x61\x65\x33\x61\x39\x31\x63\x62\x38\x62\x39\x33\x62\x37\x32\x34\x64\x37\x63\x35\x61\x31\x35\x31\x39\x30\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xA8\x50\x72\x6F\x6D\x69\x73\x65\x73\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x33\x62\x34\x33\x37\x36\x63\x62\x65\x65\x38\x39\x66\x65\x33\x33\x31\x30\x33\x62\x30\x65\x36\x37\x34\x35\x39\x37\x63\x30\x65\x61\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x39\x63\x38\x35\x32\x32\x65\x33\x30\x37\x33\x35\x37\x63\x62\x39\x35\x38\x34\x39\x32\x65\x65\x39\x38\x66\x64\x39\x33\x30\x34\x32\x87\xA2\x49\x64\xD9\x20\x39\x63\x38\x35\x32\x32\x65\x33\x30\x37\x33\x35\x37\x63\x62\x39\x35\x38\x34\x39\x32\x65\x65\x39\x38\x66\x64\x39\x33\x30\x34\x32\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xA8\x49\x50\x61\x63\x6B\x61\x67\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\x61\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x44\x61\x74\x65\x54\x69\x6D\x65\x28\x76\x61\x6C\x75\x65\x3A\x20\x61\x6E\x79\x29\x3A\x20\x28\x62\x6F\x6F\x6C\x65\x61\x6E\x2C\x20\x73\x74\x72\x69\x6E\x67\x3F\x29\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x44\x61\x74\x65\x54\x69\x6D\x65\x22\x20\x74\x68\x65\x6E\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0A\x09\x65\x6C\x73\x65\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x44\x61\x74\x65\x54\x69\x6D\x65\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x29\x0A\x09\x65\x6E\x64\x0A\x65\x6E\x64\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x69\x73\x50\x61\x63\x6B\x61\x67\x65\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x44\x61\x74\x65\x54\x69\x6D\x65\x20\x3D\x20\x69\x73\x44\x61\x74\x65\x54\x69\x6D\x65\x2C\x0A\x09\x50\x61\x79\x6C\x6F\x61\x64\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x61\x6E\x79\x29\x2C\x0A\x7D\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x20\x3D\x20\x7B\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x54\x69\x6D\x65\x73\x74\x61\x6D\x70\x3A\x20\x44\x61\x74\x65\x54\x69\x6D\x65\x2C\x0A\x09\x50\x61\x79\x6C\x6F\x61\x64\x3A\x20\x7B\x20\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x61\x6E\x79\x20\x7D\x2C\x0A\x7D\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x73\x50\x61\x63\x6B\x61\x67\x65\x28\x6F\x62\x6A\x29\x0A\x65\x6E\x64\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x32\x64\x35\x36\x39\x36\x65\x65\x35\x62\x64\x66\x34\x63\x38\x61\x30\x61\x35\x34\x32\x62\x66\x35\x38\x66\x36\x33\x62\x37\x33\x38\x87\xA2\x49\x64\xD9\x20\x32\x64\x35\x36\x39\x36\x65\x65\x35\x62\x64\x66\x34\x63\x38\x61\x30\x61\x35\x34\x32\x62\x66\x35\x38\x66\x36\x33\x62\x37\x33\x38\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xA7\x43\x6F\x6E\x74\x65\x78\x74\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\xB9\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x73\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x54\x79\x70\x65\x73\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x0A\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x43\x6F\x6E\x74\x65\x78\x74\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x2E\x6E\x65\x77\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0A\x09\x63\x68\x65\x63\x6B\x28\x63\x6F\x6E\x74\x65\x78\x74\x29\x0A\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x09\x73\x65\x6C\x66\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x0A\x09\x73\x65\x6C\x66\x2E\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x73\x20\x3D\x20\x7B\x7D\x0A\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x73\x65\x6C\x66\x2C\x20\x43\x6F\x6E\x74\x65\x78\x74\x29\x20\x3A\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x2E\x69\x73\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x79\x70\x65\x73\x2E\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x28\x6F\x62\x6A\x29\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x3A\x50\x75\x62\x6C\x69\x73\x68\x28\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x64\x61\x74\x61\x3A\x20\x61\x6E\x79\x29\x20\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x3A\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x29\x20\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x3A\x44\x65\x73\x74\x72\x6F\x79\x28\x29\x20\x65\x6E\x64\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x43\x6F\x6E\x74\x65\x78\x74\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x62\x63\x37\x37\x31\x30\x66\x36\x61\x61\x64\x33\x32\x34\x39\x37\x39\x38\x61\x63\x30\x31\x61\x63\x37\x30\x63\x36\x30\x38\x62\x33\x87\xA2\x49\x64\xD9\x20\x62\x63\x37\x37\x31\x30\x66\x36\x61\x61\x64\x33\x32\x34\x39\x37\x39\x38\x61\x63\x30\x31\x61\x63\x37\x30\x63\x36\x30\x38\x62\x33\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA4\x4E\x61\x6D\x65\xA8\x4C\x69\x67\x68\x74\x69\x6E\x67\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA8\x4C\x69\x67\x68\x74\x69\x6E\x67\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x85\xAA\x42\x72\x69\x67\x68\x74\x6E\x65\x73\x73\x81\xA7\x46\x6C\x6F\x61\x74\x33\x32\x02\xA7\x41\x6D\x62\x69\x65\x6E\x74\x81\xA6\x43\x6F\x6C\x6F\x72\x33\x93\x00\x00\x00\xAD\x47\x6C\x6F\x62\x61\x6C\x53\x68\x61\x64\x6F\x77\x73\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x4F\x75\x74\x6C\x69\x6E\x65\x73\x81\xA4\x42\x6F\x6F\x6C\xC2\xAA\x54\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x79\x81\xA4\x45\x6E\x75\x6D\x01\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x64\x32\x32\x61\x64\x63\x33\x61\x39\x62\x64\x37\x31\x39\x35\x64\x61\x65\x34\x65\x33\x63\x34\x65\x61\x32\x36\x31\x32\x63\x30\x39\x87\xA2\x49\x64\xD9\x20\x64\x32\x32\x61\x64\x63\x33\x61\x39\x62\x64\x37\x31\x39\x35\x64\x61\x65\x34\x65\x33\x63\x34\x65\x61\x32\x36\x31\x32\x63\x30\x39\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\xA4\x4E\x61\x6D\x65\xA9\x69\x6E\x69\x74\x2E\x73\x70\x65\x63\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x3B\xE3\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x62\x61\x73\x69\x63\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x61\x6E\x79\x28\x22\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x62\x6F\x6F\x6C\x65\x61\x6E\x28\x74\x72\x75\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x6F\x6E\x65\x28\x6E\x69\x6C\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x74\x61\x62\x6C\x65\x28\x7B\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x61\x6E\x79\x28\x6E\x69\x6C\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x62\x6F\x6F\x6C\x65\x61\x6E\x28\x22\x74\x72\x75\x65\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x6F\x6E\x65\x28\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x74\x72\x75\x65\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x74\x72\x75\x65\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x74\x61\x62\x6C\x65\x28\x38\x32\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x73\x70\x65\x63\x69\x61\x6C\x20\x6E\x75\x6D\x62\x65\x72\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x54\x65\x6E\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x31\x30\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x54\x77\x6F\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x32\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x54\x65\x6E\x45\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x31\x30\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x54\x77\x6F\x45\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x32\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x28\x38\x2C\x20\x31\x31\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x38\x2C\x20\x31\x31\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x61\x78\x54\x65\x6E\x28\x35\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x61\x78\x54\x65\x6E\x28\x31\x30\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x61\x78\x54\x65\x6E\x28\x31\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x61\x78\x54\x65\x6E\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x69\x6E\x54\x77\x6F\x28\x35\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x69\x6E\x54\x77\x6F\x28\x32\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x69\x6E\x54\x77\x6F\x28\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x69\x6E\x54\x77\x6F\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x61\x78\x54\x65\x6E\x45\x78\x28\x35\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x61\x78\x54\x65\x6E\x45\x78\x28\x39\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x61\x78\x54\x65\x6E\x45\x78\x28\x31\x30\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x61\x78\x54\x65\x6E\x45\x78\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x69\x6E\x54\x77\x6F\x45\x78\x28\x35\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x69\x6E\x54\x77\x6F\x45\x78\x28\x33\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x69\x6E\x54\x77\x6F\x45\x78\x28\x32\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x69\x6E\x54\x77\x6F\x45\x78\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x37\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x38\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x39\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x31\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x31\x32\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x28\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x37\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x38\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x39\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x31\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x31\x32\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x69\x67\x68\x74\x54\x6F\x45\x6C\x65\x76\x65\x6E\x45\x78\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x22\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x31\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x75\x70\x6C\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x54\x75\x70\x6C\x65\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x54\x75\x70\x6C\x65\x43\x68\x65\x63\x6B\x28\x31\x2C\x20\x22\x32\x22\x2C\x20\x33\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x54\x75\x70\x6C\x65\x43\x68\x65\x63\x6B\x28\x31\x2C\x20\x22\x32\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x54\x75\x70\x6C\x65\x43\x68\x65\x63\x6B\x28\x31\x2C\x20\x22\x32\x22\x2C\x20\x22\x33\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x75\x6E\x69\x6F\x6E\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x75\x6D\x62\x65\x72\x4F\x72\x53\x74\x72\x69\x6E\x67\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x53\x74\x72\x69\x6E\x67\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x53\x74\x72\x69\x6E\x67\x28\x22\x31\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x53\x74\x72\x69\x6E\x67\x28\x6E\x69\x6C\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x2C\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x62\x61\x72\x22\x29\x2C\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x6F\x6F\x66\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x62\x61\x72\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x6F\x6F\x66\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x28\x22\x46\x4F\x4F\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x46\x4F\x4F\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x42\x41\x52\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x4F\x4F\x46\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6D\x75\x6C\x74\x69\x70\x6C\x65\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x66\x6F\x6F\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x6F\x6F\x66\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x66\x6F\x6F\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x62\x61\x72\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x6F\x6F\x66\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x53\x69\x6E\x67\x6C\x65\x28\x22\x46\x4F\x4F\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x46\x4F\x4F\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x42\x41\x52\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x55\x6E\x69\x6F\x6E\x28\x22\x4F\x4F\x46\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x28\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x35\x30\x30\x30\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x28\x35\x30\x30\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x28\x31\x2E\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x74\x65\x67\x65\x72\x4D\x61\x78\x35\x30\x30\x30\x28\x22\x31\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x64\x65\x73\x63\x72\x69\x62\x65\x28\x22\x61\x72\x72\x61\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x61\x72\x72\x61\x79\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x6E\x79\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x61\x6E\x79\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x73\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x22\x66\x6F\x6F\x22\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x31\x2C\x20\x22\x32\x22\x2C\x20\x33\x7D\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x41\x72\x72\x61\x79\x28\x7B\x31\x2C\x20\x22\x32\x22\x2C\x20\x33\x7D\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x41\x72\x72\x61\x79\x28\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x73\x28\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x22\x31\x22\x2C\x20\x22\x32\x22\x2C\x20\x22\x33\x22\x7D\x2C\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x66\x6F\x6F\x20\x3D\x20\x22\x62\x61\x72\x22\x0D\x0A\x09\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x5B\x31\x5D\x20\x3D\x20\x22\x6E\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x09\x09\x5B\x35\x5D\x20\x3D\x20\x22\x73\x65\x71\x75\x65\x6E\x74\x69\x61\x6C\x22\x0D\x0A\x09\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x62\x65\x20\x66\x6F\x6F\x6C\x65\x64\x20\x62\x79\x20\x73\x70\x61\x72\x73\x65\x20\x61\x72\x72\x61\x79\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x6E\x79\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x61\x6E\x79\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x61\x6E\x79\x41\x72\x72\x61\x79\x28\x7B\x0D\x0A\x09\x09\x09\x09\x5B\x31\x5D\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x09\x5B\x32\x5D\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x09\x09\x5B\x34\x5D\x20\x3D\x20\x34\x2C\x0D\x0A\x09\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6D\x61\x70\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x7B\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x7B\x61\x20\x3D\x20\x31\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x7B\x5B\x31\x5D\x20\x3D\x20\x22\x61\x22\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x7B\x61\x20\x3D\x20\x22\x61\x22\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x4E\x75\x6D\x62\x65\x72\x4D\x61\x70\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x73\x65\x74\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x20\x3D\x20\x74\x2E\x73\x65\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x61\x20\x3D\x20\x74\x72\x75\x65\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x5B\x31\x5D\x20\x3D\x20\x22\x61\x22\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x61\x20\x3D\x20\x22\x61\x22\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x7B\x61\x20\x3D\x20\x66\x61\x6C\x73\x65\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x53\x65\x74\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x49\x56\x65\x63\x74\x6F\x72\x33\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x77\x20\x3D\x20\x30\x2C\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x33\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x77\x20\x3D\x20\x30\x2C\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x73\x74\x72\x69\x63\x74\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x49\x56\x65\x63\x74\x6F\x72\x33\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x30\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x77\x20\x3D\x20\x30\x2C\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x33\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x77\x20\x3D\x20\x30\x2C\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x56\x65\x63\x74\x6F\x72\x33\x28\x7B\x0D\x0A\x09\x09\x09\x78\x20\x3D\x20\x31\x2C\x0D\x0A\x09\x09\x09\x79\x20\x3D\x20\x32\x2C\x0D\x0A\x09\x09\x09\x7A\x20\x3D\x20\x33\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x64\x65\x65\x70\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x49\x50\x6C\x61\x79\x65\x72\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x09\x09\x7D\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x31\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x31\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x64\x65\x65\x70\x20\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x49\x50\x6C\x61\x79\x65\x72\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x49\x50\x6C\x61\x79\x65\x72\x28\x7B\x0D\x0A\x09\x09\x09\x6E\x61\x6D\x65\x20\x3D\x20\x22\x54\x65\x73\x74\x50\x6C\x61\x79\x65\x72\x22\x2C\x0D\x0A\x09\x09\x09\x69\x6E\x76\x65\x6E\x74\x6F\x72\x79\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x73\x69\x7A\x65\x20\x3D\x20\x31\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x09\x09\x7D\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x53\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x53\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x6F\x6F\x6C\x56\x61\x6C\x75\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x6F\x6F\x6C\x56\x61\x6C\x75\x65\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x28\x62\x6F\x6F\x6C\x56\x61\x6C\x75\x65\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x79\x70\x65\x73\x20\x69\x6E\x68\x65\x72\x69\x74\x61\x6E\x63\x65\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x47\x75\x69\x4F\x62\x6A\x65\x63\x74\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x65\x78\x74\x4C\x61\x62\x65\x6C\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x54\x65\x78\x74\x4C\x61\x62\x65\x6C\x22\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x53\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x28\x66\x72\x61\x6D\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x28\x74\x65\x78\x74\x4C\x61\x62\x65\x6C\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x28\x73\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x67\x75\x69\x4F\x62\x6A\x65\x63\x74\x43\x68\x65\x63\x6B\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x65\x6E\x75\x6D\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x45\x6E\x75\x6D\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x45\x6E\x75\x6D\x28\x22\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x22\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x2E\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x28\x22\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x2E\x4E\x61\x6D\x65\x22\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x2E\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x28\x45\x6E\x75\x6D\x2E\x53\x6F\x72\x74\x4F\x72\x64\x65\x72\x2E\x43\x75\x73\x74\x6F\x6D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x28\x45\x6E\x75\x6D\x2E\x45\x61\x73\x69\x6E\x67\x53\x74\x79\x6C\x65\x2E\x4C\x69\x6E\x65\x61\x72\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x73\x6F\x72\x74\x4F\x72\x64\x65\x72\x45\x6E\x75\x6D\x43\x68\x65\x63\x6B\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x28\x67\x61\x6D\x65\x2E\x43\x68\x69\x6C\x64\x41\x64\x64\x65\x64\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x28\x6E\x69\x6C\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x28\x56\x65\x63\x74\x6F\x72\x33\x2E\x6E\x65\x77\x28\x29\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x54\x4F\x44\x4F\x3A\x20\x41\x64\x64\x20\x74\x68\x69\x73\x20\x62\x61\x63\x6B\x20\x77\x68\x65\x6E\x20\x4C\x65\x6D\x75\x72\x20\x73\x75\x70\x70\x6F\x72\x74\x73\x20\x69\x74\x0D\x0A\x09\x2D\x2D\x20\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x2D\x2D\x20\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x20\x3D\x20\x67\x61\x6D\x65\x2E\x43\x68\x69\x6C\x64\x41\x64\x64\x65\x64\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x20\x65\x6E\x64\x29\x0D\x0A\x09\x2D\x2D\x20\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x28\x63\x6F\x6E\x6E\x29\x29\x0D\x0A\x09\x2D\x2D\x20\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x28\x6E\x69\x6C\x29\x29\x29\x0D\x0A\x09\x2D\x2D\x20\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x28\x56\x65\x63\x74\x6F\x72\x33\x2E\x6E\x65\x77\x28\x29\x29\x29\x29\x0D\x0A\x09\x2D\x2D\x20\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x77\x72\x61\x70\x70\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x46\x6F\x6F\x20\x3D\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x6F\x6F\x20\x3D\x20\x74\x2E\x77\x72\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x61\x2C\x20\x62\x2C\x20\x63\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x25\x64\x22\x2C\x20\x61\x2C\x20\x62\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x63\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x72\x65\x73\x75\x6C\x74\x20\x2E\x2E\x20\x22\x20\x22\x20\x2E\x2E\x20\x63\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x73\x75\x6C\x74\x0D\x0A\x09\x09\x65\x6E\x64\x2C\x20\x63\x68\x65\x63\x6B\x46\x6F\x6F\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x2C\x20\x22\x61\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x2C\x20\x32\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x2C\x20\x22\x61\x22\x2C\x20\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x70\x63\x61\x6C\x6C\x28\x66\x6F\x6F\x2C\x20\x22\x61\x22\x2C\x20\x31\x2C\x20\x22\x62\x22\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x73\x74\x72\x69\x63\x74\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x54\x79\x70\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6D\x79\x54\x79\x70\x65\x28\x22\x61\x22\x2C\x20\x22\x62\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x6D\x79\x54\x79\x70\x65\x28\x22\x61\x22\x2C\x20\x31\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x63\x6F\x6D\x6D\x6F\x6E\x20\x4F\x4F\x50\x20\x74\x79\x70\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x4D\x79\x43\x6C\x61\x73\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x4D\x79\x43\x6C\x61\x73\x73\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x4D\x79\x43\x6C\x61\x73\x73\x0D\x0A\x0D\x0A\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x4D\x79\x43\x6C\x61\x73\x73\x2E\x6E\x65\x77\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x20\x3D\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x7D\x2C\x20\x4D\x79\x43\x6C\x61\x73\x73\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x43\x6C\x61\x73\x73\x28\x63\x6C\x61\x73\x73\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x74\x20\x3D\x20\x67\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x74\x20\x6F\x72\x20\x6D\x74\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x7E\x3D\x20\x63\x6C\x61\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x62\x61\x64\x20\x6D\x65\x6D\x62\x65\x72\x20\x6F\x66\x20\x63\x6C\x61\x73\x73\x22\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x4D\x79\x43\x6C\x61\x73\x73\x20\x3D\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x43\x6C\x61\x73\x73\x28\x4D\x79\x43\x6C\x61\x73\x73\x29\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x4F\x62\x6A\x65\x63\x74\x20\x3D\x20\x4D\x79\x43\x6C\x61\x73\x73\x2E\x6E\x65\x77\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x4D\x79\x43\x6C\x61\x73\x73\x28\x6D\x79\x4F\x62\x6A\x65\x63\x74\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x4D\x79\x43\x6C\x61\x73\x73\x28\x7B\x7D\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x4D\x79\x43\x6C\x61\x73\x73\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x74\x72\x65\x61\x74\x20\x4E\x61\x4E\x20\x61\x73\x20\x6E\x75\x6D\x62\x65\x72\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x30\x2F\x30\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x22\x31\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x74\x72\x65\x61\x74\x20\x6E\x75\x6D\x62\x65\x72\x73\x20\x61\x73\x20\x4E\x61\x4E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x61\x6E\x28\x31\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x61\x6E\x28\x30\x2F\x30\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x6E\x61\x6E\x28\x22\x31\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x6C\x6F\x77\x20\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x6E\x75\x6D\x62\x65\x72\x20\x61\x6E\x64\x20\x4E\x61\x4E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x75\x6D\x62\x65\x72\x4F\x72\x4E\x61\x4E\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6E\x61\x6E\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x4E\x61\x4E\x28\x31\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x4E\x61\x4E\x28\x30\x2F\x30\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6E\x75\x6D\x62\x65\x72\x4F\x72\x4E\x61\x4E\x28\x22\x31\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x6E\x6F\x6E\x2D\x73\x74\x72\x69\x6E\x67\x20\x6B\x65\x79\x73\x20\x66\x6F\x72\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x5B\x6B\x65\x79\x5D\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x20\x7D\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x5B\x6B\x65\x79\x5D\x20\x3D\x20\x31\x20\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x5B\x6B\x65\x79\x5D\x20\x3D\x20\x22\x31\x22\x20\x7D\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x66\x61\x69\x6C\x69\x6E\x67\x20\x6F\x6E\x20\x6E\x6F\x6E\x2D\x73\x74\x72\x69\x6E\x67\x20\x6B\x65\x79\x73\x20\x66\x6F\x72\x20\x73\x74\x72\x69\x63\x74\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x73\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x61\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x20\x7D\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x61\x20\x3D\x20\x31\x2C\x20\x5B\x7B\x7D\x5D\x20\x3D\x20\x32\x20\x7D\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x28\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x2C\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x7B\x0D\x0A\x09\x09\x09\x09\x4D\x79\x42\x75\x74\x74\x6F\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x7B\x7D\x29\x28\x35\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x20\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4E\x6F\x74\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x54\x65\x78\x74\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x31\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x31\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x32\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x32\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x20\x73\x68\x6F\x72\x74\x68\x61\x6E\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x46\x72\x61\x6D\x65\x22\x2C\x20\x7B\x0D\x0A\x09\x09\x09\x09\x4D\x79\x42\x75\x74\x74\x6F\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x7D\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x7B\x7D\x29\x28\x35\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x20\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4E\x6F\x74\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x54\x65\x78\x74\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x31\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x31\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x32\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x32\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x20\x73\x68\x6F\x72\x74\x68\x61\x6E\x64\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x46\x72\x61\x6D\x65\x22\x2C\x20\x7B\x0D\x0A\x09\x09\x09\x09\x4D\x79\x42\x75\x74\x74\x6F\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x29\x0D\x0A\x09\x09\x09\x7D\x29\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x7B\x7D\x29\x28\x35\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x20\x7D\x29\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4E\x6F\x74\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x54\x65\x78\x74\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x72\x61\x6D\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x31\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x31\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x75\x74\x74\x6F\x6E\x32\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x49\x6D\x61\x67\x65\x42\x75\x74\x74\x6F\x6E\x22\x2C\x20\x66\x72\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x62\x75\x74\x74\x6F\x6E\x32\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x22\x4D\x79\x42\x75\x74\x74\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x6D\x79\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x62\x75\x74\x74\x6F\x6E\x49\x6E\x46\x72\x61\x6D\x65\x20\x3D\x20\x66\x72\x61\x6D\x65\x20\x7D\x29\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x6D\x61\x74\x63\x68\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6D\x61\x74\x63\x68\x28\x22\x25\x64\x2B\x22\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x22\x31\x32\x33\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x22\x61\x62\x63\x22\x29\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x6B\x65\x79\x4F\x66\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x4F\x70\x74\x69\x6F\x6E\x41\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x09\x4F\x70\x74\x69\x6F\x6E\x42\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6B\x65\x79\x4F\x66\x28\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x22\x4F\x70\x74\x69\x6F\x6E\x41\x22\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x22\x4F\x70\x74\x69\x6F\x6E\x43\x22\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x76\x61\x6C\x75\x65\x4F\x66\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x4F\x70\x74\x69\x6F\x6E\x41\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x09\x4F\x70\x74\x69\x6F\x6E\x42\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x4F\x66\x28\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x6D\x79\x4E\x65\x77\x45\x6E\x75\x6D\x2E\x4F\x70\x74\x69\x6F\x6E\x41\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x28\x63\x68\x65\x63\x6B\x28\x31\x30\x31\x30\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x74\x28\x22\x73\x68\x6F\x75\x6C\x64\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x22\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x31\x2C\x20\x32\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x31\x2C\x20\x32\x2C\x20\x33\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x31\x30\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x22\x48\x65\x6C\x6C\x6F\x22\x2C\x20\x31\x30\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x28\x7B\x20\x46\x6F\x6F\x20\x3D\x20\x22\x42\x61\x72\x22\x20\x7D\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x32\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x2C\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x32\x28\x7B\x31\x30\x2C\x20\x32\x30\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x32\x28\x7B\x31\x30\x2C\x20\x32\x30\x2C\x20\x22\x48\x65\x6C\x6C\x6F\x22\x7D\x29\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6E\x6F\x74\x20\x66\x69\x78\x65\x64\x41\x72\x72\x61\x79\x43\x68\x65\x63\x6B\x32\x28\x7B\x31\x30\x2C\x20\x32\x30\x2C\x20\x33\x30\x7D\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x31\x61\x33\x31\x62\x62\x38\x34\x35\x38\x65\x65\x66\x65\x30\x64\x62\x32\x64\x30\x30\x65\x61\x62\x31\x35\x66\x36\x62\x31\x34\x66\x87\xA2\x49\x64\xD9\x20\x31\x61\x33\x31\x62\x62\x38\x34\x35\x38\x65\x65\x66\x65\x30\x64\x62\x32\x64\x30\x30\x65\x61\x62\x31\x35\x66\x36\x62\x31\x34\x66\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x35\x64\x37\x33\x34\x36\x37\x61\x31\x64\x35\x38\x38\x38\x34\x33\x65\x61\x32\x30\x30\x63\x65\x65\x65\x62\x63\x65\x33\x65\x62\x35\xA4\x4E\x61\x6D\x65\xA9\x42\x61\x73\x65\x70\x6C\x61\x74\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA4\x50\x61\x72\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x85\xA6\x4C\x6F\x63\x6B\x65\x64\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x50\x6F\x73\x69\x74\x69\x6F\x6E\x81\xA7\x56\x65\x63\x74\x6F\x72\x33\x93\x00\xF6\x00\xA4\x53\x69\x7A\x65\x81\xA7\x56\x65\x63\x74\x6F\x72\x33\x93\xCD\x02\x00\x14\xCD\x02\x00\xA5\x43\x6F\x6C\x6F\x72\x81\xA6\x43\x6F\x6C\x6F\x72\x33\x93\xCB\x3F\xD8\xD8\xC2\xA4\x54\xDE\x7F\xCB\x3F\xD7\xD7\xB2\x03\x1C\xEA\xF2\xCB\x3F\xD8\xD8\xC2\xA4\x54\xDE\x7F\xA8\x41\x6E\x63\x68\x6F\x72\x65\x64\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x38\x39\x37\x33\x34\x66\x31\x64\x66\x39\x39\x37\x64\x65\x38\x35\x66\x64\x32\x62\x64\x64\x34\x32\x37\x64\x64\x66\x33\x34\x66\x62\x87\xA2\x49\x64\xD9\x20\x38\x39\x37\x33\x34\x66\x31\x64\x66\x39\x39\x37\x64\x65\x38\x35\x66\x64\x32\x62\x64\x64\x34\x32\x37\x64\x64\x66\x33\x34\x66\x62\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA4\x4E\x61\x6D\x65\xA8\x57\x6F\x72\x6D\x68\x6F\x6C\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x0D\x94\x6C\x6F\x63\x61\x6C\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x22\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x73\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x54\x79\x70\x65\x73\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x41\x77\x61\x69\x74\x46\x6F\x72\x56\x61\x6C\x75\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x72\x6F\x6D\x69\x73\x65\x73\x2E\x70\x72\x6F\x6D\x69\x73\x65\x41\x77\x61\x69\x74\x56\x61\x6C\x75\x65\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x43\x6F\x6E\x74\x65\x78\x74\x29\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0D\x0A\x0D\x0A\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0D\x0A\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x74\x79\x70\x65\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x74\x79\x70\x65\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x50\x61\x63\x6B\x61\x67\x65\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x65\x6D\x6F\x74\x65\x46\x6F\x6C\x64\x65\x72\x4E\x61\x6D\x65\x3D\x20\x22\x50\x6F\x72\x74\x61\x6C\x22\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x46\x6F\x6C\x64\x65\x72\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x46\x69\x6E\x64\x46\x69\x72\x73\x74\x43\x68\x69\x6C\x64\x28\x52\x65\x6D\x6F\x74\x65\x46\x6F\x6C\x64\x65\x72\x4E\x61\x6D\x65\x29\x20\x3A\x3A\x20\x46\x6F\x6C\x64\x65\x72\x0D\x0A\x0D\x0A\x69\x66\x20\x6E\x6F\x74\x20\x53\x74\x6F\x72\x61\x67\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x69\x66\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x49\x73\x53\x65\x72\x76\x65\x72\x28\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x6F\x6C\x64\x65\x72\x22\x29\x0D\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x52\x65\x6D\x6F\x74\x65\x46\x6F\x6C\x64\x65\x72\x4E\x61\x6D\x65\x0D\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x2E\x50\x61\x72\x65\x6E\x74\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x52\x65\x6D\x6F\x74\x65\x46\x6F\x6C\x64\x65\x72\x4E\x61\x6D\x65\x29\x20\x3A\x3A\x20\x46\x6F\x6C\x64\x65\x72\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65\x50\x61\x63\x6B\x61\x67\x65\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x64\x61\x74\x61\x3A\x20\x61\x6E\x79\x29\x3A\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x7B\x0D\x0A\x09\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x09\x41\x63\x74\x69\x6F\x6E\x20\x3D\x20\x61\x63\x74\x69\x6F\x6E\x2C\x0D\x0A\x09\x09\x54\x69\x6D\x65\x73\x74\x61\x6D\x70\x20\x3D\x20\x44\x61\x74\x65\x54\x69\x6D\x65\x2E\x6E\x6F\x77\x28\x29\x2C\x0D\x0A\x09\x09\x50\x61\x79\x6C\x6F\x61\x64\x20\x3D\x20\x64\x61\x74\x61\x0D\x0A\x09\x7D\x20\x3A\x3A\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x53\x74\x6F\x72\x61\x67\x65\x0D\x0A\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x6E\x65\x77\x28\x29\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x20\x3D\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x7D\x2C\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x20\x3A\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x69\x73\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x79\x70\x65\x73\x2E\x69\x73\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x77\x61\x69\x74\x43\x6F\x6E\x74\x65\x78\x74\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x3A\x20\x6E\x75\x6D\x62\x65\x72\x3F\x29\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x29\x29\x29\x0D\x0A\x09\x63\x68\x65\x63\x6B\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x74\x65\x78\x74\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x41\x77\x61\x69\x74\x46\x6F\x72\x56\x61\x6C\x75\x65\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x29\x0D\x0A\x09\x69\x66\x20\x74\x69\x6D\x65\x6F\x75\x74\x20\x74\x68\x65\x6E\x20\x0D\x0A\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x74\x69\x6D\x65\x6F\x75\x74\x28\x74\x69\x6D\x65\x6F\x75\x74\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x63\x6F\x6E\x74\x65\x78\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x29\x0D\x0A\x09\x09\x77\x61\x72\x6E\x28\x22\x55\x68\x20\x6F\x68\x21\x20\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x77\x65\x6E\x74\x20\x77\x72\x6F\x6E\x67\x20\x61\x77\x61\x69\x74\x69\x6E\x67\x20\x63\x6F\x6E\x74\x65\x78\x74\x5C\x6E\x22\x2C\x20\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x20\x3D\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x64\x64\x43\x6F\x6E\x74\x65\x78\x74\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x6F\x6E\x74\x65\x78\x74\x50\x72\x6F\x6D\x69\x73\x65\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x20\x3A\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x64\x64\x43\x6F\x6E\x74\x65\x78\x74\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x52\x65\x6D\x6F\x74\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x52\x65\x6D\x6F\x74\x65\x45\x76\x65\x6E\x74\x22\x29\x2C\x0D\x0A\x09\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x43\x6F\x6E\x74\x65\x78\x74\x2E\x6E\x65\x77\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x2C\x0D\x0A\x09\x09\x41\x63\x74\x69\x6F\x6E\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x7D\x0D\x0A\x09\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x20\x3D\x20\x6E\x65\x77\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x5F\x43\x6F\x6E\x74\x65\x78\x74\x73\x5B\x63\x6F\x6E\x74\x65\x78\x74\x5D\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x6D\x61\x6B\x65\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x09\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x6E\x65\x77\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x64\x6F\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x3A\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x2D\x3E\x28\x29\x3F\x29\x3A\x20\x28\x29\x0D\x0A\x09\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x65\x76\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x77\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x77\x61\x69\x74\x43\x6F\x6E\x74\x65\x78\x74\x28\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2E\x43\x6F\x6E\x74\x65\x78\x74\x29\x0D\x0A\x09\x69\x66\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x49\x73\x53\x65\x72\x76\x65\x72\x28\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x76\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x2E\x52\x65\x6D\x6F\x74\x65\x2E\x4F\x6E\x53\x65\x72\x76\x65\x72\x45\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6C\x69\x73\x74\x65\x6E\x65\x72\x3A\x20\x50\x6C\x61\x79\x65\x72\x2C\x20\x70\x61\x63\x6B\x61\x67\x65\x3A\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x50\x6C\x61\x79\x65\x72\x22\x29\x29\x0D\x0A\x09\x09\x09\x09\x63\x68\x65\x63\x6B\x28\x6C\x69\x73\x74\x65\x6E\x65\x72\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x29\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x65\x76\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x63\x6F\x6E\x74\x65\x78\x74\x2E\x52\x65\x6D\x6F\x74\x65\x2E\x4F\x6E\x43\x6C\x69\x65\x6E\x74\x45\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6C\x69\x73\x74\x65\x6E\x65\x72\x3A\x20\x50\x6C\x61\x79\x65\x72\x2C\x20\x70\x61\x63\x6B\x61\x67\x65\x3A\x20\x49\x50\x61\x63\x6B\x61\x67\x65\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x50\x6C\x61\x79\x65\x72\x22\x29\x29\x0D\x0A\x09\x09\x09\x09\x63\x68\x65\x63\x6B\x28\x6C\x69\x73\x74\x65\x6E\x65\x72\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x65\x76\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\x87\xA2\x49\x64\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x37\x66\x62\x63\x38\x34\x30\x64\x61\x63\x38\x63\x35\x36\x37\x34\x36\x39\x65\x39\x32\x62\x63\x33\x32\x62\x61\x37\x66\x39\x64\x66\xA4\x4E\x61\x6D\x65\xA8\x50\x61\x63\x6B\x61\x67\x65\x73\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x94\xD9\x20\x38\x64\x37\x32\x31\x37\x63\x37\x66\x32\x61\x61\x66\x39\x38\x61\x34\x35\x62\x37\x36\x34\x63\x64\x36\x66\x35\x65\x37\x30\x61\x33\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\xD9\x20\x33\x38\x36\x30\x33\x33\x34\x66\x35\x39\x30\x33\x62\x65\x37\x37\x64\x31\x39\x35\x37\x37\x31\x38\x66\x31\x35\x32\x39\x39\x33\x66\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x61\x31\x34\x33\x30\x35\x39\x65\x63\x61\x65\x38\x33\x34\x61\x65\x65\x34\x31\x62\x39\x34\x66\x35\x61\x63\x32\x39\x66\x35\x31\x32\x87\xA2\x49\x64\xD9\x20\x61\x31\x34\x33\x30\x35\x39\x65\x63\x61\x65\x38\x33\x34\x61\x65\x65\x34\x31\x62\x39\x34\x66\x35\x61\x63\x32\x39\x66\x35\x31\x32\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA4\x4E\x61\x6D\x65\xAC\x53\x6F\x75\x6E\x64\x53\x65\x72\x76\x69\x63\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x53\x6F\x75\x6E\x64\x53\x65\x72\x76\x69\x63\x65\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xB7\x52\x65\x73\x70\x65\x63\x74\x46\x69\x6C\x74\x65\x72\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64\x81\xA4\x42\x6F\x6F\x6C\xC3\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x31\x33\x34\x30\x37\x66\x34\x63\x36\x35\x65\x35\x37\x31\x30\x35\x65\x38\x32\x34\x32\x32\x61\x36\x61\x30\x39\x66\x63\x66\x61\x38\x87\xA2\x49\x64\xD9\x20\x31\x33\x34\x30\x37\x66\x34\x63\x36\x35\x65\x35\x37\x31\x30\x35\x65\x38\x32\x34\x32\x32\x61\x36\x61\x30\x39\x66\x63\x66\x61\x38\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\xA4\x4E\x61\x6D\x65\xB4\x65\x76\x61\x65\x72\x61\x5F\x70\x72\x6F\x6D\x69\x73\x65\x40\x33\x2E\x31\x2E\x30\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x39\x63\x64\x36\x39\x35\x33\x36\x61\x30\x64\x63\x39\x37\x33\x63\x66\x66\x65\x65\x64\x36\x35\x62\x31\x36\x61\x35\x36\x39\x65\x30\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x34\x36\x62\x63\x63\x39\x32\x63\x61\x35\x64\x63\x39\x33\x64\x61\x37\x35\x62\x61\x36\x38\x35\x61\x65\x37\x63\x62\x34\x39\x39\x31\x87\xA2\x49\x64\xD9\x20\x34\x36\x62\x63\x63\x39\x32\x63\x61\x35\x64\x63\x39\x33\x64\x61\x37\x35\x62\x61\x36\x38\x35\x61\x65\x37\x63\x62\x34\x39\x39\x31\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xA8\x49\x43\x6F\x6E\x74\x65\x78\x74\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\x43\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x73\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0D\x0A\x09\x4E\x61\x6D\x65\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0D\x0A\x09\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x73\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x7D\x29\x0D\x0A\x0D\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x7B\x0D\x0A\x09\x4E\x61\x6D\x65\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0D\x0A\x09\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x73\x3A\x20\x7B\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x28\x29\x2D\x3E\x6E\x69\x6C\x7D\x2C\x0D\x0A\x09\x0D\x0A\x09\x5F\x5F\x69\x6E\x64\x65\x78\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x6E\x65\x77\x3A\x20\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x70\x72\x6F\x76\x69\x64\x65\x72\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x69\x73\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x2C\x0D\x0A\x0D\x0A\x09\x50\x75\x62\x6C\x69\x73\x68\x3A\x20\x28\x73\x65\x6C\x66\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x64\x61\x74\x61\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x0D\x0A\x09\x53\x75\x62\x73\x63\x72\x69\x62\x65\x3A\x20\x28\x73\x65\x6C\x66\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x29\x20\x2D\x3E\x20\x28\x29\x2C\x0D\x0A\x09\x44\x65\x73\x74\x72\x6F\x79\x3A\x20\x28\x73\x65\x6C\x66\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x0D\x0A\x7D\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x49\x73\x43\x6F\x6E\x74\x65\x78\x74\x28\x6F\x62\x6A\x29\x20\x3A\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0D\x0A\x65\x6E\x64\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\x87\xA2\x49\x64\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA4\x4E\x61\x6D\x65\xA6\x5F\x49\x6E\x64\x65\x78\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x92\xD9\x20\x31\x33\x34\x30\x37\x66\x34\x63\x36\x35\x65\x35\x37\x31\x30\x35\x65\x38\x32\x34\x32\x32\x61\x36\x61\x30\x39\x66\x63\x66\x61\x38\xD9\x20\x39\x65\x65\x38\x31\x34\x38\x33\x37\x61\x32\x37\x62\x31\x31\x38\x35\x37\x65\x38\x39\x35\x36\x33\x31\x33\x35\x63\x64\x33\x30\x36\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x33\x38\x36\x30\x33\x33\x34\x66\x35\x39\x30\x33\x62\x65\x37\x37\x64\x31\x39\x35\x37\x37\x31\x38\x66\x31\x35\x32\x39\x39\x33\x66\x87\xA2\x49\x64\xD9\x20\x33\x38\x36\x30\x33\x33\x34\x66\x35\x39\x30\x33\x62\x65\x37\x37\x64\x31\x39\x35\x37\x37\x31\x38\x66\x31\x35\x32\x39\x39\x33\x66\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA4\x4E\x61\x6D\x65\xA1\x74\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xD9\x3F\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x5F\x49\x6E\x64\x65\x78\x5B\x22\x73\x68\x61\x6E\x65\x62\x75\x74\x74\x5F\x74\x40\x31\x2E\x33\x2E\x31\x22\x5D\x5B\x22\x74\x22\x5D\x29\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x36\x39\x37\x38\x61\x31\x38\x38\x33\x35\x38\x64\x36\x34\x62\x66\x62\x32\x31\x30\x33\x37\x31\x32\x32\x30\x32\x61\x39\x39\x32\x32\x87\xA2\x49\x64\xD9\x20\x36\x39\x37\x38\x61\x31\x38\x38\x33\x35\x38\x64\x36\x34\x62\x66\x62\x32\x31\x30\x33\x37\x31\x32\x32\x30\x32\x61\x39\x39\x32\x32\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xAD\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x02\x14\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x73\x53\x55\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x29\x29\x2C\x0A\x7D\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x7B\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x0A\x09\x43\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x2C\x0A\x0A\x09\x5F\x5F\x69\x6E\x64\x65\x78\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0A\x0A\x09\x6E\x65\x77\x3A\x20\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x3F\x29\x20\x2D\x3E\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0A\x09\x69\x73\x3A\x20\x28\x6F\x62\x6A\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x2C\x0A\x0A\x09\x53\x75\x62\x73\x63\x72\x69\x62\x65\x3A\x20\x28\x73\x65\x6C\x66\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x3A\x20\x28\x29\x20\x2D\x3E\x20\x6E\x69\x6C\x29\x20\x2D\x3E\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x2C\x0A\x7D\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x49\x73\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x20\x3A\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0A\x65\x6E\x64\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\x87\xA2\x49\x64\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\xA4\x4E\x61\x6D\x65\xA6\x70\x6F\x72\x74\x61\x6C\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA9\x44\x61\x74\x61\x4D\x6F\x64\x65\x6C\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x94\xD9\x20\x62\x63\x37\x37\x31\x30\x66\x36\x61\x61\x64\x33\x32\x34\x39\x37\x39\x38\x61\x63\x30\x31\x61\x63\x37\x30\x63\x36\x30\x38\x62\x33\xD9\x20\x37\x66\x62\x63\x38\x34\x30\x64\x61\x63\x38\x63\x35\x36\x37\x34\x36\x39\x65\x39\x32\x62\x63\x33\x32\x62\x61\x37\x66\x39\x64\x66\xD9\x20\x61\x31\x34\x33\x30\x35\x39\x65\x63\x61\x65\x38\x33\x34\x61\x65\x65\x34\x31\x62\x39\x34\x66\x35\x61\x63\x32\x39\x66\x35\x31\x32\xD9\x20\x35\x64\x37\x33\x34\x36\x37\x61\x31\x64\x35\x38\x38\x38\x34\x33\x65\x61\x32\x30\x30\x63\x65\x65\x65\x62\x63\x65\x33\x65\x62\x35\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x37\x66\x62\x63\x38\x34\x30\x64\x61\x63\x38\x63\x35\x36\x37\x34\x36\x39\x65\x39\x32\x62\x63\x33\x32\x62\x61\x37\x66\x39\x64\x66\x87\xA2\x49\x64\xD9\x20\x37\x66\x62\x63\x38\x34\x30\x64\x61\x63\x38\x63\x35\x36\x37\x34\x36\x39\x65\x39\x32\x62\x63\x33\x32\x62\x61\x37\x66\x39\x64\x66\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x33\x37\x32\x33\x38\x33\x62\x36\x35\x63\x61\x61\x33\x62\x31\x35\x62\x36\x35\x65\x66\x34\x32\x66\x65\x65\x63\x38\x37\x34\x62\x38\xA4\x4E\x61\x6D\x65\xB1\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xB1\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC3\xD9\x20\x39\x63\x64\x36\x39\x35\x33\x36\x61\x30\x64\x63\x39\x37\x33\x63\x66\x66\x65\x65\x64\x36\x35\x62\x31\x36\x61\x35\x36\x39\x65\x30\x87\xA2\x49\x64\xD9\x20\x39\x63\x64\x36\x39\x35\x33\x36\x61\x30\x64\x63\x39\x37\x33\x63\x66\x66\x65\x65\x64\x36\x35\x62\x31\x36\x61\x35\x36\x39\x65\x30\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x31\x33\x34\x30\x37\x66\x34\x63\x36\x35\x65\x35\x37\x31\x30\x35\x65\x38\x32\x34\x32\x32\x61\x36\x61\x30\x39\x66\x63\x66\x61\x38\xA4\x4E\x61\x6D\x65\xA7\x70\x72\x6F\x6D\x69\x73\x65\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\xEB\x16\x2D\x2D\x5B\x5B\x0D\x0A\x09\x41\x6E\x20\x69\x6D\x70\x6C\x65\x6D\x65\x6E\x74\x61\x74\x69\x6F\x6E\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2F\x41\x2B\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x50\x52\x4F\x4D\x49\x53\x45\x5F\x49\x4E\x5F\x4C\x49\x53\x54\x20\x3D\x20\x22\x4E\x6F\x6E\x2D\x70\x72\x6F\x6D\x69\x73\x65\x20\x76\x61\x6C\x75\x65\x20\x70\x61\x73\x73\x65\x64\x20\x69\x6E\x74\x6F\x20\x25\x73\x20\x61\x74\x20\x69\x6E\x64\x65\x78\x20\x25\x73\x22\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x20\x3D\x20\x22\x50\x6C\x65\x61\x73\x65\x20\x70\x61\x73\x73\x20\x61\x20\x6C\x69\x73\x74\x20\x6F\x66\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x25\x73\x22\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x20\x3D\x20\x22\x50\x6C\x65\x61\x73\x65\x20\x70\x61\x73\x73\x20\x61\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x25\x73\x21\x22\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x4D\x4F\x44\x45\x5F\x4B\x45\x59\x5F\x4D\x45\x54\x41\x54\x41\x42\x4C\x45\x20\x3D\x20\x7B\x5F\x5F\x6D\x6F\x64\x65\x20\x3D\x20\x22\x6B\x22\x7D\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x65\x6E\x75\x6D\x20\x64\x69\x63\x74\x69\x6F\x6E\x61\x72\x79\x20\x77\x69\x74\x68\x20\x73\x6F\x6D\x65\x20\x6D\x65\x74\x61\x6D\x65\x74\x68\x6F\x64\x73\x20\x74\x6F\x20\x70\x72\x65\x76\x65\x6E\x74\x20\x63\x6F\x6D\x6D\x6F\x6E\x20\x6D\x69\x73\x74\x61\x6B\x65\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6D\x61\x6B\x65\x45\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x4E\x61\x6D\x65\x2C\x20\x6D\x65\x6D\x62\x65\x72\x73\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x65\x6E\x75\x6D\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x6D\x65\x6D\x62\x65\x72\x4E\x61\x6D\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6D\x65\x6D\x62\x65\x72\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x65\x6E\x75\x6D\x5B\x6D\x65\x6D\x62\x65\x72\x4E\x61\x6D\x65\x5D\x20\x3D\x20\x6D\x65\x6D\x62\x65\x72\x4E\x61\x6D\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x65\x6E\x75\x6D\x2C\x20\x7B\x0D\x0A\x09\x09\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x6B\x29\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x69\x73\x20\x6E\x6F\x74\x20\x69\x6E\x20\x25\x73\x21\x22\x2C\x20\x6B\x2C\x20\x65\x6E\x75\x6D\x4E\x61\x6D\x65\x29\x2C\x20\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x5F\x5F\x6E\x65\x77\x69\x6E\x64\x65\x78\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x43\x72\x65\x61\x74\x69\x6E\x67\x20\x6E\x65\x77\x20\x6D\x65\x6D\x62\x65\x72\x73\x20\x69\x6E\x20\x25\x73\x20\x69\x73\x20\x6E\x6F\x74\x20\x61\x6C\x6C\x6F\x77\x65\x64\x21\x22\x2C\x20\x65\x6E\x75\x6D\x4E\x61\x6D\x65\x29\x2C\x20\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x7D\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x6E\x20\x6F\x62\x6A\x65\x63\x74\x20\x74\x6F\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x20\x72\x75\x6E\x74\x69\x6D\x65\x20\x65\x72\x72\x6F\x72\x73\x20\x74\x68\x61\x74\x20\x6F\x63\x63\x75\x72\x20\x64\x75\x72\x69\x6E\x67\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x65\x78\x70\x65\x72\x69\x65\x6E\x63\x65\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x20\x6C\x69\x6B\x65\x20\x74\x68\x69\x73\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x0D\x0A\x09\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x6F\x66\x20\x74\x68\x69\x73\x20\x6F\x62\x6A\x65\x63\x74\x2E\x0D\x0A\x0D\x0A\x09\x40\x63\x6C\x61\x73\x73\x20\x45\x72\x72\x6F\x72\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x45\x72\x72\x6F\x72\x20\x64\x6F\x0D\x0A\x09\x45\x72\x72\x6F\x72\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x4B\x69\x6E\x64\x20\x3D\x20\x6D\x61\x6B\x65\x45\x6E\x75\x6D\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x22\x2C\x20\x7B\x0D\x0A\x09\x09\x09\x22\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x22\x2C\x0D\x0A\x09\x09\x09\x22\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x0D\x0A\x09\x09\x09\x22\x4E\x6F\x74\x52\x65\x73\x6F\x6C\x76\x65\x64\x49\x6E\x54\x69\x6D\x65\x22\x2C\x0D\x0A\x09\x09\x09\x22\x54\x69\x6D\x65\x64\x4F\x75\x74\x22\x2C\x0D\x0A\x09\x09\x7D\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x09\x45\x72\x72\x6F\x72\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x45\x72\x72\x6F\x72\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x6F\x70\x74\x69\x6F\x6E\x73\x2C\x20\x70\x61\x72\x65\x6E\x74\x29\x0D\x0A\x09\x09\x6F\x70\x74\x69\x6F\x6E\x73\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x20\x6F\x72\x20\x7B\x7D\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x65\x72\x72\x6F\x72\x29\x20\x6F\x72\x20\x22\x5B\x54\x68\x69\x73\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x73\x20\x6E\x6F\x20\x65\x72\x72\x6F\x72\x20\x74\x65\x78\x74\x2E\x5D\x22\x2C\x0D\x0A\x09\x09\x09\x74\x72\x61\x63\x65\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x74\x72\x61\x63\x65\x2C\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x63\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x6B\x69\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x70\x61\x72\x65\x6E\x74\x20\x3D\x20\x70\x61\x72\x65\x6E\x74\x2C\x0D\x0A\x09\x09\x09\x63\x72\x65\x61\x74\x65\x64\x54\x69\x63\x6B\x20\x3D\x20\x6F\x73\x2E\x63\x6C\x6F\x63\x6B\x28\x29\x2C\x0D\x0A\x09\x09\x09\x63\x72\x65\x61\x74\x65\x64\x54\x72\x61\x63\x65\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x29\x2C\x0D\x0A\x09\x09\x7D\x2C\x20\x45\x72\x72\x6F\x72\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x2E\x69\x73\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x79\x70\x65\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x20\x3D\x20\x67\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x79\x70\x65\x28\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x61\x77\x67\x65\x74\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x2C\x20\x22\x65\x72\x72\x6F\x72\x22\x29\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x74\x79\x70\x65\x28\x72\x61\x77\x67\x65\x74\x28\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x2C\x20\x22\x65\x78\x74\x65\x6E\x64\x22\x29\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x2C\x20\x6B\x69\x6E\x64\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x6B\x69\x6E\x64\x20\x7E\x3D\x20\x6E\x69\x6C\x2C\x20\x22\x41\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x20\x6D\x75\x73\x74\x20\x6E\x6F\x74\x20\x62\x65\x20\x6E\x69\x6C\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x45\x72\x72\x6F\x72\x2E\x69\x73\x28\x61\x6E\x79\x74\x68\x69\x6E\x67\x29\x20\x61\x6E\x64\x20\x61\x6E\x79\x74\x68\x69\x6E\x67\x2E\x6B\x69\x6E\x64\x20\x3D\x3D\x20\x6B\x69\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x65\x78\x74\x65\x6E\x64\x28\x6F\x70\x74\x69\x6F\x6E\x73\x29\x0D\x0A\x09\x09\x6F\x70\x74\x69\x6F\x6E\x73\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x20\x6F\x72\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x6B\x69\x6E\x64\x20\x3D\x20\x6F\x70\x74\x69\x6F\x6E\x73\x2E\x6B\x69\x6E\x64\x20\x6F\x72\x20\x73\x65\x6C\x66\x2E\x6B\x69\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x6F\x70\x74\x69\x6F\x6E\x73\x2C\x20\x73\x65\x6C\x66\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x67\x65\x74\x45\x72\x72\x6F\x72\x43\x68\x61\x69\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x20\x3D\x20\x7B\x20\x73\x65\x6C\x66\x20\x7D\x0D\x0A\x0D\x0A\x09\x09\x77\x68\x69\x6C\x65\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x5B\x23\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x5D\x2E\x70\x61\x72\x65\x6E\x74\x20\x64\x6F\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x2C\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x5B\x23\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x5D\x2E\x70\x61\x72\x65\x6E\x74\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x73\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x5F\x5F\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x72\x72\x6F\x72\x53\x74\x72\x69\x6E\x67\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x2D\x2D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x25\x73\x29\x20\x2D\x2D\x22\x2C\x20\x73\x65\x6C\x66\x2E\x6B\x69\x6E\x64\x20\x6F\x72\x20\x22\x3F\x22\x29\x2C\x0D\x0A\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x3A\x67\x65\x74\x45\x72\x72\x6F\x72\x43\x68\x61\x69\x6E\x28\x29\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x65\x72\x72\x6F\x72\x53\x74\x72\x69\x6E\x67\x73\x2C\x20\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6E\x63\x61\x74\x28\x7B\x0D\x0A\x09\x09\x09\x09\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x2E\x74\x72\x61\x63\x65\x20\x6F\x72\x20\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x2E\x65\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x09\x09\x09\x72\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x2E\x63\x6F\x6E\x74\x65\x78\x74\x2C\x0D\x0A\x09\x09\x09\x7D\x2C\x20\x22\x5C\x6E\x22\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x61\x62\x6C\x65\x2E\x63\x6F\x6E\x63\x61\x74\x28\x65\x72\x72\x6F\x72\x53\x74\x72\x69\x6E\x67\x73\x2C\x20\x22\x5C\x6E\x22\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x50\x61\x63\x6B\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x69\x6E\x74\x6F\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x69\x74\x73\x20\x6C\x65\x6E\x67\x74\x68\x2E\x0D\x0A\x0D\x0A\x09\x55\x73\x65\x64\x20\x74\x6F\x20\x63\x61\x6A\x6F\x6C\x65\x20\x76\x61\x72\x61\x72\x67\x73\x20\x77\x69\x74\x68\x6F\x75\x74\x20\x64\x72\x6F\x70\x70\x69\x6E\x67\x20\x73\x70\x61\x72\x73\x65\x20\x76\x61\x6C\x75\x65\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x2C\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x66\x69\x72\x73\x74\x20\x76\x61\x6C\x75\x65\x20\x28\x73\x75\x63\x63\x65\x73\x73\x29\x2C\x20\x61\x6E\x64\x20\x70\x61\x63\x6B\x73\x20\x61\x6C\x6C\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x76\x61\x6C\x75\x65\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x61\x63\x6B\x52\x65\x73\x75\x6C\x74\x28\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x2C\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6D\x61\x6B\x65\x45\x72\x72\x6F\x72\x48\x61\x6E\x64\x6C\x65\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x20\x7E\x3D\x20\x6E\x69\x6C\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x72\x72\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x20\x6F\x62\x6A\x65\x63\x74\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x61\x20\x74\x61\x62\x6C\x65\x2C\x20\x66\x6F\x72\x77\x61\x72\x64\x20\x69\x74\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x53\x68\x6F\x75\x6C\x64\x20\x77\x65\x20\x65\x78\x74\x65\x6E\x64\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x20\x68\x65\x72\x65\x20\x61\x6E\x64\x20\x61\x64\x64\x20\x6F\x75\x72\x20\x6F\x77\x6E\x20\x74\x72\x61\x63\x65\x3F\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x74\x79\x70\x65\x28\x65\x72\x72\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x65\x72\x72\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x65\x72\x72\x2C\x0D\x0A\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x09\x09\x74\x72\x61\x63\x65\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x65\x72\x72\x29\x2C\x20\x32\x29\x2C\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x22\x20\x2E\x2E\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x7D\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x61\x6C\x6C\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x20\x77\x69\x74\x68\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x6E\x64\x6C\x69\x6E\x67\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x61\x63\x6B\x52\x65\x73\x75\x6C\x74\x28\x78\x70\x63\x61\x6C\x6C\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x6D\x61\x6B\x65\x45\x72\x72\x6F\x72\x48\x61\x6E\x64\x6C\x65\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x29\x2C\x20\x2E\x2E\x2E\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x69\x6E\x76\x6F\x6B\x65\x73\x20\x61\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x6E\x64\x6C\x69\x6E\x67\x20\x61\x6E\x64\x0D\x0A\x09\x72\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E\x20\x6D\x65\x63\x68\x61\x6E\x69\x73\x6D\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65\x41\x64\x76\x61\x6E\x63\x65\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x75\x6E\x70\x61\x63\x6B\x28\x72\x65\x73\x75\x6C\x74\x2C\x20\x31\x2C\x20\x72\x65\x73\x75\x6C\x74\x4C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x45\x6D\x70\x74\x79\x28\x74\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x6E\x65\x78\x74\x28\x74\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x6E\x20\x65\x6E\x75\x6D\x20\x76\x61\x6C\x75\x65\x20\x75\x73\x65\x64\x20\x74\x6F\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x27\x73\x20\x73\x74\x61\x74\x75\x73\x2E\x0D\x0A\x09\x40\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x53\x74\x61\x74\x75\x73\x0D\x0A\x09\x40\x74\x61\x67\x20\x65\x6E\x75\x6D\x0D\x0A\x09\x40\x77\x69\x74\x68\x69\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x22\x53\x74\x61\x72\x74\x65\x64\x22\x20\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x2C\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x73\x65\x74\x74\x6C\x65\x64\x20\x79\x65\x74\x2E\x0D\x0A\x09\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x22\x52\x65\x73\x6F\x6C\x76\x65\x64\x22\x20\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x2E\x0D\x0A\x09\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x22\x52\x65\x6A\x65\x63\x74\x65\x64\x22\x20\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x2E\x0D\x0A\x09\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x22\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x20\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x62\x65\x66\x6F\x72\x65\x20\x69\x74\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x40\x70\x72\x6F\x70\x20\x53\x74\x61\x74\x75\x73\x20\x53\x74\x61\x74\x75\x73\x0D\x0A\x09\x40\x77\x69\x74\x68\x69\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x40\x72\x65\x61\x64\x6F\x6E\x6C\x79\x0D\x0A\x09\x40\x74\x61\x67\x20\x65\x6E\x75\x6D\x73\x0D\x0A\x09\x41\x20\x74\x61\x62\x6C\x65\x20\x63\x6F\x6E\x74\x61\x69\x6E\x69\x6E\x67\x20\x61\x6C\x6C\x20\x6D\x65\x6D\x62\x65\x72\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x60\x53\x74\x61\x74\x75\x73\x60\x20\x65\x6E\x75\x6D\x2C\x20\x65\x2E\x67\x2E\x2C\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x60\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x61\x6E\x20\x6F\x62\x6A\x65\x63\x74\x20\x74\x68\x61\x74\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x73\x20\x61\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x65\x78\x69\x73\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x66\x75\x74\x75\x72\x65\x2C\x20\x62\x75\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x72\x69\x67\x68\x74\x20\x6E\x6F\x77\x2E\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6C\x6C\x6F\x77\x20\x79\x6F\x75\x20\x74\x6F\x20\x74\x68\x65\x6E\x20\x61\x74\x74\x61\x63\x68\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x74\x68\x61\x74\x20\x63\x61\x6E\x20\x72\x75\x6E\x20\x6F\x6E\x63\x65\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x62\x65\x63\x6F\x6D\x65\x73\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x20\x28\x6B\x6E\x6F\x77\x6E\x20\x61\x73\x20\x2A\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x2A\x29\x2C\x0D\x0A\x09\x6F\x72\x20\x69\x66\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x73\x20\x6F\x63\x63\x75\x72\x72\x65\x64\x20\x28\x6B\x6E\x6F\x77\x6E\x20\x61\x73\x20\x2A\x72\x65\x6A\x65\x63\x74\x69\x6E\x67\x2A\x29\x2E\x0D\x0A\x0D\x0A\x09\x40\x63\x6C\x61\x73\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x40\x5F\x5F\x69\x6E\x64\x65\x78\x20\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x7B\x0D\x0A\x09\x45\x72\x72\x6F\x72\x20\x3D\x20\x45\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x53\x74\x61\x74\x75\x73\x20\x3D\x20\x6D\x61\x6B\x65\x45\x6E\x75\x6D\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x22\x2C\x20\x7B\x22\x53\x74\x61\x72\x74\x65\x64\x22\x2C\x20\x22\x52\x65\x73\x6F\x6C\x76\x65\x64\x22\x2C\x20\x22\x52\x65\x6A\x65\x63\x74\x65\x64\x22\x2C\x20\x22\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x7D\x29\x2C\x0D\x0A\x09\x5F\x67\x65\x74\x54\x69\x6D\x65\x20\x3D\x20\x6F\x73\x2E\x63\x6C\x6F\x63\x6B\x2C\x0D\x0A\x09\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x22\x29\x2E\x48\x65\x61\x72\x74\x62\x65\x61\x74\x2C\x0D\x0A\x7D\x0D\x0A\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x5F\x69\x6E\x64\x65\x78\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x70\x61\x72\x65\x6E\x74\x29\x0D\x0A\x09\x69\x66\x20\x70\x61\x72\x65\x6E\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x61\x72\x65\x6E\x74\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x41\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x6F\x72\x20\x6E\x69\x6C\x22\x2C\x20\x32\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x65\x6C\x66\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x2D\x2D\x20\x55\x73\x65\x64\x20\x74\x6F\x20\x6C\x6F\x63\x61\x74\x65\x20\x77\x68\x65\x72\x65\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x63\x72\x65\x61\x74\x65\x64\x0D\x0A\x09\x09\x5F\x73\x6F\x75\x72\x63\x65\x20\x3D\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x0D\x0A\x09\x09\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x20\x74\x61\x62\x6C\x65\x20\x63\x6F\x6E\x74\x61\x69\x6E\x69\x6E\x67\x20\x61\x20\x6C\x69\x73\x74\x20\x6F\x66\x20\x61\x6C\x6C\x20\x72\x65\x73\x75\x6C\x74\x73\x2C\x20\x77\x68\x65\x74\x68\x65\x72\x20\x73\x75\x63\x63\x65\x73\x73\x20\x6F\x72\x20\x66\x61\x69\x6C\x75\x72\x65\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x4F\x6E\x6C\x79\x20\x76\x61\x6C\x69\x64\x20\x69\x66\x20\x5F\x73\x74\x61\x74\x75\x73\x20\x69\x73\x20\x73\x65\x74\x20\x74\x6F\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x65\x73\x69\x64\x65\x73\x20\x53\x74\x61\x72\x74\x65\x64\x0D\x0A\x09\x09\x5F\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x6E\x69\x6C\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x4C\x75\x61\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x6C\x69\x6B\x65\x20\x73\x70\x61\x72\x73\x65\x20\x61\x72\x72\x61\x79\x73\x20\x76\x65\x72\x79\x20\x6D\x75\x63\x68\x2C\x20\x73\x6F\x20\x77\x65\x20\x65\x78\x70\x6C\x69\x63\x69\x74\x6C\x79\x20\x73\x74\x6F\x72\x65\x20\x74\x68\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x6C\x65\x6E\x67\x74\x68\x20\x6F\x66\x20\x5F\x76\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x68\x61\x6E\x64\x6C\x65\x20\x6D\x69\x64\x64\x6C\x65\x20\x6E\x69\x6C\x73\x2E\x0D\x0A\x09\x09\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x20\x3D\x20\x2D\x31\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x72\x61\x63\x6B\x73\x20\x69\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x68\x61\x73\x20\x6E\x6F\x20\x65\x72\x72\x6F\x72\x20\x6F\x62\x73\x65\x72\x76\x65\x72\x73\x2E\x2E\x0D\x0A\x09\x09\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x74\x72\x75\x65\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x51\x75\x65\x75\x65\x73\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x77\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x69\x6E\x76\x6F\x6B\x65\x20\x77\x68\x65\x6E\x20\x77\x65\x20\x75\x70\x64\x61\x74\x65\x21\x0D\x0A\x09\x09\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x09\x09\x5F\x71\x75\x65\x75\x65\x64\x46\x69\x6E\x61\x6C\x6C\x79\x20\x3D\x20\x7B\x7D\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x72\x75\x6E\x20\x77\x68\x65\x6E\x2F\x69\x66\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x09\x09\x5F\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x20\x3D\x20\x6E\x69\x6C\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x22\x70\x61\x72\x65\x6E\x74\x22\x20\x6F\x66\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x2E\x20\x52\x65\x71\x75\x69\x72\x65\x64\x20\x66\x6F\x72\x0D\x0A\x09\x09\x2D\x2D\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E\x20\x75\x70\x73\x74\x72\x65\x61\x6D\x2E\x0D\x0A\x09\x09\x5F\x70\x61\x72\x65\x6E\x74\x20\x3D\x20\x70\x61\x72\x65\x6E\x74\x2C\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x43\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x61\x72\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x68\x61\x76\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x6E\x74\x6F\x20\x74\x68\x69\x73\x20\x6F\x6E\x65\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x74\x72\x61\x63\x6B\x20\x74\x68\x65\x6D\x20\x66\x6F\x72\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E\x20\x64\x6F\x77\x6E\x73\x74\x72\x65\x61\x6D\x2E\x0D\x0A\x09\x09\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x3D\x20\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x7B\x7D\x2C\x20\x4D\x4F\x44\x45\x5F\x4B\x45\x59\x5F\x4D\x45\x54\x41\x54\x41\x42\x4C\x45\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x70\x61\x72\x65\x6E\x74\x20\x61\x6E\x64\x20\x70\x61\x72\x65\x6E\x74\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x70\x61\x72\x65\x6E\x74\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x73\x65\x6C\x66\x5D\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x73\x65\x6C\x66\x2C\x20\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x73\x65\x6C\x66\x3A\x5F\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x73\x65\x6C\x66\x3A\x5F\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x29\x0D\x0A\x09\x09\x69\x66\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x28\x29\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x20\x3D\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x5F\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x28\x0D\x0A\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x73\x6F\x75\x72\x63\x65\x2C\x0D\x0A\x09\x09\x09\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x2C\x0D\x0A\x09\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x0D\x0A\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x28\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x6F\x6E\x73\x74\x72\x75\x63\x74\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x79\x6F\x75\x20\x60\x72\x65\x73\x6F\x6C\x76\x65\x60\x20\x77\x69\x74\x68\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x6E\x74\x6F\x2E\x0D\x0A\x0D\x0A\x09\x59\x6F\x75\x20\x63\x61\x6E\x20\x73\x61\x66\x65\x6C\x79\x20\x79\x69\x65\x6C\x64\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x6E\x64\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x62\x6C\x6F\x63\x6B\x20\x74\x68\x65\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x74\x68\x72\x65\x61\x64\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x79\x46\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x09\x77\x61\x69\x74\x28\x31\x29\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x22\x48\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64\x21\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6D\x79\x46\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x70\x72\x69\x6E\x74\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x59\x6F\x75\x20\x64\x6F\x20\x6E\x6F\x74\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x75\x73\x65\x20\x60\x70\x63\x61\x6C\x6C\x60\x20\x77\x69\x74\x68\x69\x6E\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x20\x45\x72\x72\x6F\x72\x73\x20\x74\x68\x61\x74\x20\x6F\x63\x63\x75\x72\x20\x64\x75\x72\x69\x6E\x67\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x75\x67\x68\x74\x20\x61\x6E\x64\x20\x74\x75\x72\x6E\x65\x64\x20\x69\x6E\x74\x6F\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x61\x75\x74\x6F\x6D\x61\x74\x69\x63\x61\x6C\x6C\x79\x2E\x20\x49\x66\x20\x60\x65\x72\x72\x6F\x72\x28\x29\x60\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x77\x69\x74\x68\x20\x61\x20\x74\x61\x62\x6C\x65\x2C\x20\x74\x68\x61\x74\x20\x74\x61\x62\x6C\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x74\x68\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x2E\x20\x4F\x74\x68\x65\x72\x77\x69\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x20\x65\x72\x72\x6F\x72\x73\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x69\x6E\x74\x6F\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x29\x60\x20\x6F\x62\x6A\x65\x63\x74\x73\x20\x66\x6F\x72\x20\x74\x72\x61\x63\x6B\x69\x6E\x67\x20\x64\x65\x62\x75\x67\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x0D\x0A\x09\x59\x6F\x75\x20\x6D\x61\x79\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x61\x6E\x20\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x20\x62\x79\x20\x75\x73\x69\x6E\x67\x20\x74\x68\x65\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x3A\x0D\x0A\x0D\x0A\x09\x2A\x20\x54\x68\x69\x73\x20\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6F\x20\x61\x62\x6F\x72\x74\x20\x61\x6E\x79\x20\x6F\x6E\x67\x6F\x69\x6E\x67\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x20\x6C\x65\x61\x64\x69\x6E\x67\x20\x75\x70\x20\x74\x6F\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x62\x65\x69\x6E\x67\x20\x73\x65\x74\x74\x6C\x65\x64\x2E\x0D\x0A\x09\x2A\x20\x43\x61\x6C\x6C\x20\x74\x68\x65\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x74\x68\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x61\x73\x20\x69\x74\x73\x20\x6F\x6E\x6C\x79\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x74\x6F\x20\x73\x65\x74\x20\x61\x20\x68\x6F\x6F\x6B\x20\x77\x68\x69\x63\x68\x20\x77\x69\x6C\x6C\x20\x69\x6E\x20\x74\x75\x72\x6E\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x2F\x69\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x09\x2A\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x60\x74\x72\x75\x65\x60\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x79\x6F\x75\x20\x63\x61\x6C\x6C\x65\x64\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x2E\x0D\x0A\x09\x2A\x20\x43\x61\x6C\x6C\x69\x6E\x67\x20\x60\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x60\x20\x77\x69\x74\x68\x20\x6E\x6F\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x6F\x76\x65\x72\x72\x69\x64\x65\x20\x61\x20\x70\x72\x65\x76\x69\x6F\x75\x73\x6C\x79\x20\x73\x65\x74\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x2C\x20\x62\x75\x74\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x73\x74\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x60\x74\x72\x75\x65\x60\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x75\x72\x72\x65\x6E\x74\x6C\x79\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x09\x2A\x20\x59\x6F\x75\x20\x63\x61\x6E\x20\x73\x65\x74\x20\x74\x68\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x20\x61\x74\x20\x61\x6E\x79\x20\x74\x69\x6D\x65\x20\x62\x65\x66\x6F\x72\x65\x20\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x2E\x0D\x0A\x09\x2A\x20\x57\x68\x65\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x63\x61\x6C\x6C\x73\x20\x74\x6F\x20\x60\x72\x65\x73\x6F\x6C\x76\x65\x60\x20\x6F\x72\x20\x60\x72\x65\x6A\x65\x63\x74\x60\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x69\x67\x6E\x6F\x72\x65\x64\x2C\x20\x72\x65\x67\x61\x72\x64\x6C\x65\x73\x73\x20\x6F\x66\x20\x69\x66\x20\x79\x6F\x75\x20\x73\x65\x74\x20\x61\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x68\x6F\x6F\x6B\x20\x6F\x72\x20\x6E\x6F\x74\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x20\x28\x72\x65\x73\x6F\x6C\x76\x65\x3A\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x20\x72\x65\x6A\x65\x63\x74\x3A\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x3A\x20\x28\x61\x62\x6F\x72\x74\x48\x61\x6E\x64\x6C\x65\x72\x3A\x20\x28\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x29\x29\x20\x2D\x3E\x20\x28\x29\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x65\x78\x65\x63\x75\x74\x6F\x72\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3A\x5F\x5F\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x28\x25\x73\x29\x22\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x54\x68\x65\x20\x73\x61\x6D\x65\x20\x61\x73\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x5D\x28\x2F\x61\x70\x69\x2F\x50\x72\x6F\x6D\x69\x73\x65\x23\x6E\x65\x77\x29\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x20\x62\x65\x67\x69\x6E\x73\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x60\x48\x65\x61\x72\x74\x62\x65\x61\x74\x60\x20\x65\x76\x65\x6E\x74\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x73\x70\x69\x72\x69\x74\x75\x61\x6C\x20\x72\x65\x70\x6C\x61\x63\x65\x6D\x65\x6E\x74\x20\x66\x6F\x72\x20\x60\x73\x70\x61\x77\x6E\x60\x2C\x20\x62\x75\x74\x20\x69\x74\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x73\x75\x66\x66\x65\x72\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x5B\x69\x73\x73\x75\x65\x73\x5D\x28\x68\x74\x74\x70\x73\x3A\x2F\x2F\x65\x72\x79\x6E\x2E\x69\x6F\x2F\x67\x69\x73\x74\x2F\x33\x64\x62\x38\x34\x35\x37\x39\x38\x36\x36\x63\x30\x39\x39\x63\x64\x64\x35\x62\x62\x32\x66\x66\x33\x37\x39\x34\x37\x63\x65\x63\x29\x20\x61\x73\x20\x60\x73\x70\x61\x77\x6E\x60\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x69\x6E\x73\x74\x61\x6E\x63\x65\x2C\x20\x63\x68\x69\x6C\x64\x4E\x61\x6D\x65\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x29\x0D\x0A\x09\x20\x20\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x20\x3D\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x63\x68\x69\x6C\x64\x4E\x61\x6D\x65\x2C\x20\x74\x69\x6D\x65\x6F\x75\x74\x29\x0D\x0A\x0D\x0A\x09\x09\x3B\x28\x63\x68\x69\x6C\x64\x20\x61\x6E\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x29\x28\x63\x68\x69\x6C\x64\x29\x0D\x0A\x09\x20\x20\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x78\x65\x63\x75\x74\x6F\x72\x20\x28\x72\x65\x73\x6F\x6C\x76\x65\x3A\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x20\x72\x65\x6A\x65\x63\x74\x3A\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x28\x29\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x3A\x20\x28\x61\x62\x6F\x72\x74\x48\x61\x6E\x64\x6C\x65\x72\x3A\x20\x28\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x29\x29\x20\x2D\x3E\x20\x28\x29\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x6B\x2C\x20\x5F\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x72\x75\x6E\x45\x78\x65\x63\x75\x74\x6F\x72\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x5B\x31\x5D\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x20\x42\x61\x63\x6B\x77\x61\x72\x64\x73\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x0D\x0A\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x73\x79\x6E\x63\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x66\x65\x72\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x6E\x65\x65\x64\x73\x20\x74\x6F\x20\x63\x6F\x6E\x73\x75\x6D\x65\x20\x74\x68\x69\x73\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x28\x69\x2E\x65\x2E\x20\x60\x3A\x63\x61\x74\x63\x68\x28\x29\x60\x20\x69\x74\x29\x2C\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x65\x6D\x69\x74\x20\x61\x6E\x20\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x77\x61\x72\x6E\x69\x6E\x67\x20\x6F\x6E\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x66\x72\x61\x6D\x65\x2E\x20\x54\x68\x75\x73\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x6E\x6F\x74\x20\x63\x72\x65\x61\x74\x65\x20\x61\x6E\x64\x20\x73\x74\x6F\x72\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x66\x6F\x72\x20\x6C\x61\x74\x65\x72\x20\x75\x73\x65\x2E\x20\x4F\x6E\x6C\x79\x20\x63\x72\x65\x61\x74\x65\x20\x74\x68\x65\x6D\x20\x6F\x6E\x2D\x64\x65\x6D\x61\x6E\x64\x20\x61\x73\x20\x6E\x65\x65\x64\x65\x64\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x2D\x2D\x20\x45\x78\x61\x6D\x70\x6C\x65\x20\x75\x73\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x20\x74\x6F\x20\x64\x65\x6C\x69\x76\x65\x72\x20\x63\x61\x63\x68\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x3A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x67\x65\x74\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x28\x6E\x61\x6D\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x63\x61\x63\x68\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x63\x61\x63\x68\x65\x5B\x6E\x61\x6D\x65\x5D\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x68\x69\x6E\x67\x20\x3D\x20\x67\x65\x74\x54\x68\x65\x54\x68\x69\x6E\x67\x28\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x63\x68\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x3D\x20\x74\x68\x69\x6E\x67\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x5F\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x52\x75\x6E\x73\x20\x61\x20\x6E\x6F\x6E\x2D\x70\x72\x6F\x6D\x69\x73\x65\x2D\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x0D\x0A\x20\x20\x67\x69\x76\x65\x6E\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x72\x79\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x0D\x0A\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x42\x65\x67\x69\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x2C\x20\x63\x61\x6C\x6C\x69\x6E\x67\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x20\x77\x69\x74\x68\x20\x69\x74\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x2E\x20\x49\x66\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72\x73\x2C\x20\x74\x68\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x2E\x20\x59\x6F\x75\x20\x63\x61\x6E\x20\x73\x61\x66\x65\x6C\x79\x20\x79\x69\x65\x6C\x64\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x69\x6E\x66\x6F\x0D\x0A\x09\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x60\x20\x69\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x5D\x28\x23\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x29\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x73\x20\x69\x6E\x76\x6F\x6B\x65\x64\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x61\x20\x6E\x65\x77\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x6D\x61\x74\x68\x2E\x72\x61\x6E\x64\x6F\x6D\x28\x31\x2C\x20\x32\x29\x20\x3D\x3D\x20\x31\x20\x61\x6E\x64\x20\x22\x6F\x6B\x22\x20\x6F\x72\x20\x65\x72\x72\x6F\x72\x28\x22\x4F\x68\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x21\x22\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x09\x70\x72\x69\x6E\x74\x28\x74\x65\x78\x74\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x72\x72\x29\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x22\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x77\x65\x6E\x74\x20\x77\x72\x6F\x6E\x67\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x72\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x3A\x0D\x0A\x09\x09\x2A\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x77\x68\x65\x6E\x20\x61\x6C\x6C\x20\x69\x6E\x70\x75\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x2A\x20\x69\x73\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x69\x66\x20\x41\x4E\x59\x20\x69\x6E\x70\x75\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x61\x6C\x6C\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x61\x6D\x6F\x75\x6E\x74\x29\x0D\x0A\x09\x69\x66\x20\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x7E\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x22\x29\x2C\x20\x33\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x57\x65\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x61\x74\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x68\x65\x72\x65\x20\x73\x6F\x20\x74\x68\x61\x74\x20\x77\x65\x20\x63\x61\x6E\x20\x70\x72\x6F\x64\x75\x63\x65\x0D\x0A\x09\x2D\x2D\x20\x61\x20\x70\x72\x6F\x70\x65\x72\x20\x65\x72\x72\x6F\x72\x20\x72\x61\x74\x68\x65\x72\x20\x74\x68\x61\x6E\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x6F\x75\x72\x20\x65\x72\x72\x6F\x72\x2E\x0D\x0A\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x50\x52\x4F\x4D\x49\x53\x45\x5F\x49\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x69\x29\x29\x2C\x20\x33\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6E\x6F\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x6E\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x09\x69\x66\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x3D\x20\x30\x20\x6F\x72\x20\x61\x6D\x6F\x75\x6E\x74\x20\x3D\x3D\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x7B\x7D\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x6E\x20\x61\x72\x72\x61\x79\x20\x74\x6F\x20\x63\x6F\x6E\x74\x61\x69\x6E\x20\x6F\x75\x72\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x56\x61\x6C\x75\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x4B\x65\x65\x70\x20\x61\x20\x63\x6F\x75\x6E\x74\x20\x6F\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x62\x65\x63\x61\x75\x73\x65\x20\x6A\x75\x73\x74\x20\x63\x68\x65\x63\x6B\x69\x6E\x67\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x09\x2D\x2D\x20\x76\x61\x6C\x75\x65\x73\x20\x6C\x65\x6E\x67\x74\x68\x20\x77\x6F\x75\x6C\x64\x6E\x27\x74\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x66\x6F\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x6E\x69\x6C\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x64\x6F\x6E\x65\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x43\x61\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x6E\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x69\x66\x20\x61\x6C\x6C\x20\x61\x72\x65\x20\x64\x6F\x6E\x65\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x4F\x6E\x65\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x64\x6F\x6E\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x61\x6D\x6F\x75\x6E\x74\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x64\x56\x61\x6C\x75\x65\x73\x5B\x69\x5D\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x64\x56\x61\x6C\x75\x65\x73\x5B\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x5D\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x43\x6F\x75\x6E\x74\x20\x3E\x3D\x20\x28\x61\x6D\x6F\x75\x6E\x74\x20\x6F\x72\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x64\x6F\x6E\x65\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x64\x56\x61\x6C\x75\x65\x73\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x63\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x63\x61\x6E\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x6E\x73\x69\x64\x65\x20\x60\x70\x72\x6F\x6D\x69\x73\x65\x73\x60\x20\x61\x72\x65\x20\x61\x6C\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x73\x69\x6E\x63\x65\x20\x77\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x63\x68\x65\x63\x6B\x65\x64\x20\x61\x62\x6F\x76\x65\x2E\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x5B\x69\x5D\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x4F\x6E\x65\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x61\x6D\x6F\x75\x6E\x74\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x2D\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x43\x6F\x75\x6E\x74\x20\x3C\x20\x61\x6D\x6F\x75\x6E\x74\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x64\x6F\x6E\x65\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x64\x6F\x6E\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x3A\x0D\x0A\x09\x2A\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x66\x74\x65\x72\x20\x61\x6C\x6C\x20\x69\x6E\x70\x75\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x2E\x0D\x0A\x09\x2A\x20\x69\x73\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x69\x66\x20\x2A\x61\x6E\x79\x2A\x20\x69\x6E\x70\x75\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x6A\x65\x63\x74\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x69\x6E\x66\x6F\x0D\x0A\x09\x4F\x6E\x6C\x79\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x65\x61\x63\x68\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x70\x72\x65\x73\x65\x6E\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x69\x6E\x67\x20\x61\x72\x72\x61\x79\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x41\x66\x74\x65\x72\x20\x61\x6E\x79\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x2C\x20\x61\x6C\x6C\x20\x6F\x74\x68\x65\x72\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x61\x72\x65\x20\x73\x74\x69\x6C\x6C\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x7B\x54\x7D\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x61\x6C\x6C\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x46\x6F\x6C\x64\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x6F\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x69\x6E\x74\x6F\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x76\x61\x6C\x75\x65\x2E\x20\x54\x68\x65\x20\x61\x72\x72\x61\x79\x20\x69\x73\x20\x74\x72\x61\x76\x65\x72\x73\x65\x64\x20\x73\x65\x71\x75\x65\x6E\x74\x69\x61\x6C\x6C\x79\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x72\x65\x64\x75\x63\x65\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x6F\x72\x20\x76\x61\x6C\x75\x65\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x2E\x20\x45\x61\x63\x68\x20\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x72\x65\x63\x65\x69\x76\x65\x73\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x70\x72\x65\x76\x69\x6F\x75\x73\x2C\x20\x61\x6E\x64\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x63\x65\x69\x76\x65\x73\x20\x79\x6F\x75\x72\x20\x64\x65\x66\x69\x6E\x65\x64\x20\x69\x6E\x69\x74\x69\x61\x6C\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x66\x6F\x6C\x64\x69\x6E\x67\x20\x77\x69\x6C\x6C\x20\x73\x74\x6F\x70\x20\x61\x74\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x2E\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x62\x61\x73\x6B\x65\x74\x20\x3D\x20\x7B\x22\x62\x6C\x75\x65\x62\x65\x72\x72\x79\x22\x2C\x20\x22\x6D\x65\x6C\x6F\x6E\x22\x2C\x20\x22\x70\x65\x61\x72\x22\x2C\x20\x22\x6D\x65\x6C\x6F\x6E\x22\x7D\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x62\x61\x73\x6B\x65\x74\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x63\x6F\x73\x74\x2C\x20\x66\x72\x75\x69\x74\x29\x0D\x0A\x09\x09\x69\x66\x20\x66\x72\x75\x69\x74\x20\x3D\x3D\x20\x22\x62\x6C\x75\x65\x62\x65\x72\x72\x79\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x6F\x73\x74\x20\x2D\x2D\x20\x62\x6C\x75\x65\x62\x65\x72\x72\x69\x65\x73\x20\x61\x72\x65\x20\x66\x72\x65\x65\x21\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x63\x61\x6C\x6C\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x66\x72\x75\x69\x74\x20\x70\x72\x69\x63\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x65\x74\x63\x68\x50\x72\x69\x63\x65\x28\x66\x72\x75\x69\x74\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x66\x72\x75\x69\x74\x43\x6F\x73\x74\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x6F\x73\x74\x20\x2B\x20\x66\x72\x75\x69\x74\x43\x6F\x73\x74\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x30\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x73\x69\x6E\x63\x65\x20\x76\x33\x2E\x31\x2E\x30\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6C\x69\x73\x74\x20\x7B\x54\x20\x7C\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x72\x65\x64\x75\x63\x65\x72\x20\x28\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x3A\x20\x55\x2C\x20\x76\x61\x6C\x75\x65\x3A\x20\x54\x2C\x20\x69\x6E\x64\x65\x78\x3A\x20\x6E\x75\x6D\x62\x65\x72\x29\x20\x2D\x3E\x20\x55\x20\x7C\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x55\x3E\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x20\x55\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x28\x6C\x69\x73\x74\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x6C\x69\x73\x74\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x2C\x20\x22\x42\x61\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x31\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x3A\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x22\x42\x61\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x6F\x6C\x64\x3A\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x69\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x6C\x69\x73\x74\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x64\x45\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x29\x0D\x0A\x09\x09\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x20\x3D\x20\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x72\x65\x76\x69\x6F\x75\x73\x56\x61\x6C\x75\x65\x52\x65\x73\x6F\x6C\x76\x65\x64\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x70\x72\x65\x76\x69\x6F\x75\x73\x56\x61\x6C\x75\x65\x52\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x45\x6C\x65\x6D\x65\x6E\x74\x2C\x20\x69\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x61\x63\x63\x75\x6D\x75\x6C\x61\x74\x6F\x72\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x60\x63\x6F\x75\x6E\x74\x60\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x69\x6E\x70\x75\x74\x20\x61\x72\x72\x61\x79\x2E\x20\x54\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x72\x72\x61\x79\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6F\x72\x64\x65\x72\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x69\x6E\x2E\x20\x57\x68\x65\x6E\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x61\x6C\x6C\x20\x6F\x74\x68\x65\x72\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x63\x6F\x75\x6E\x74\x60\x20\x30\x20\x72\x65\x73\x75\x6C\x74\x73\x20\x69\x6E\x20\x61\x6E\x20\x65\x6D\x70\x74\x79\x20\x61\x72\x72\x61\x79\x2E\x20\x54\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x61\x6E\x74\x20\x61\x72\x72\x61\x79\x20\x77\x69\x6C\x6C\x20\x6E\x65\x76\x65\x72\x20\x68\x61\x76\x65\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x60\x63\x6F\x75\x6E\x74\x60\x20\x65\x6C\x65\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x32\x29\x20\x2D\x2D\x20\x4F\x6E\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x66\x69\x72\x73\x74\x20\x32\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6F\x75\x6E\x74\x20\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x7B\x54\x7D\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x61\x6D\x6F\x75\x6E\x74\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x61\x6D\x6F\x75\x6E\x74\x29\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x2C\x20\x22\x42\x61\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x3A\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x61\x6C\x6C\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x61\x6D\x6F\x75\x6E\x74\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x2A\x61\x6E\x79\x2A\x20\x6F\x66\x20\x74\x68\x65\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2E\x20\x49\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x20\x6F\x6E\x6C\x79\x20\x69\x66\x20\x2A\x61\x6C\x6C\x2A\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x6A\x65\x63\x74\x2E\x20\x41\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x6F\x6E\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x61\x6C\x6C\x20\x6F\x74\x68\x65\x72\x20\x70\x65\x6E\x64\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x73\x6F\x6C\x76\x65\x73\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x65\x73\x73\x65\x6E\x74\x69\x61\x6C\x6C\x79\x20\x5B\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x5D\x5D\x20\x77\x69\x74\x68\x20\x60\x31\x60\x20\x63\x6F\x75\x6E\x74\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x77\x69\x74\x68\x20\x6F\x6E\x65\x20\x65\x6C\x65\x6D\x65\x6E\x74\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x2D\x2D\x20\x52\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x66\x69\x72\x73\x74\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x28\x6F\x6E\x6C\x79\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x69\x66\x20\x61\x6C\x6C\x20\x33\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x61\x6C\x6C\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x73\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x69\x6E\x2D\x70\x6C\x61\x63\x65\x20\x53\x74\x61\x74\x75\x73\x65\x73\x20\x77\x68\x65\x6E\x20\x61\x6C\x6C\x20\x69\x6E\x70\x75\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x68\x61\x76\x65\x20\x73\x65\x74\x74\x6C\x65\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x65\x71\x75\x69\x76\x61\x6C\x65\x6E\x74\x20\x74\x6F\x20\x6D\x61\x70\x70\x69\x6E\x67\x20\x60\x70\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x6F\x76\x65\x72\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x7B\x53\x74\x61\x74\x75\x73\x7D\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x69\x66\x20\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x7E\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x22\x29\x2C\x20\x32\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x57\x65\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x61\x74\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x68\x65\x72\x65\x20\x73\x6F\x20\x74\x68\x61\x74\x20\x77\x65\x20\x63\x61\x6E\x20\x70\x72\x6F\x64\x75\x63\x65\x0D\x0A\x09\x2D\x2D\x20\x61\x20\x70\x72\x6F\x70\x65\x72\x20\x65\x72\x72\x6F\x72\x20\x72\x61\x74\x68\x65\x72\x20\x74\x68\x61\x6E\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x74\x68\x20\x6F\x75\x72\x20\x65\x72\x72\x6F\x72\x2E\x0D\x0A\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x50\x52\x4F\x4D\x49\x53\x45\x5F\x49\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x53\x65\x74\x74\x6C\x65\x64\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x69\x29\x29\x2C\x20\x32\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6E\x6F\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x6E\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x6E\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x09\x69\x66\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x3D\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x7B\x7D\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x5F\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x6E\x20\x61\x72\x72\x61\x79\x20\x74\x6F\x20\x63\x6F\x6E\x74\x61\x69\x6E\x20\x6F\x75\x72\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x61\x74\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x4B\x65\x65\x70\x20\x61\x20\x63\x6F\x75\x6E\x74\x20\x6F\x66\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x62\x65\x63\x61\x75\x73\x65\x20\x6A\x75\x73\x74\x20\x63\x68\x65\x63\x6B\x69\x6E\x67\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x09\x2D\x2D\x20\x76\x61\x6C\x75\x65\x73\x20\x6C\x65\x6E\x67\x74\x68\x20\x77\x6F\x75\x6C\x64\x6E\x27\x74\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x66\x6F\x72\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x6E\x69\x6C\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x43\x61\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x6E\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x69\x66\x20\x61\x6C\x6C\x20\x61\x72\x65\x20\x64\x6F\x6E\x65\x2E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x4F\x6E\x65\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x66\x69\x6E\x69\x73\x68\x65\x64\x43\x6F\x75\x6E\x74\x20\x3D\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x43\x6F\x75\x6E\x74\x20\x2B\x20\x31\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x61\x74\x65\x73\x5B\x69\x5D\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x43\x6F\x75\x6E\x74\x20\x3E\x3D\x20\x23\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x66\x61\x74\x65\x73\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x63\x61\x6E\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x6E\x73\x69\x64\x65\x20\x60\x70\x72\x6F\x6D\x69\x73\x65\x73\x60\x20\x61\x72\x65\x20\x61\x6C\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x73\x69\x6E\x63\x65\x20\x77\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x63\x68\x65\x63\x6B\x65\x64\x20\x61\x62\x6F\x76\x65\x2E\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x5B\x69\x5D\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x0D\x0A\x09\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x4F\x6E\x65\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x63\x63\x65\x70\x74\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x61\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x61\x6E\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x73\x65\x74\x74\x6C\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x73\x65\x74\x74\x6C\x65\x73\x20\x77\x69\x74\x68\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x2C\x20\x74\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x60\x72\x61\x63\x65\x60\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x79\x6F\x75\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x74\x6F\x6C\x65\x72\x61\x74\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x2C\x20\x61\x6E\x64\x20\x6F\x6E\x6C\x79\x20\x63\x61\x72\x65\x20\x61\x62\x6F\x75\x74\x20\x61\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x75\x73\x65\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x79\x5D\x28\x23\x61\x6E\x79\x29\x20\x6F\x72\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x73\x6F\x6D\x65\x5D\x28\x23\x73\x6F\x6D\x65\x29\x20\x69\x6E\x73\x74\x65\x61\x64\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x41\x6C\x6C\x20\x6F\x74\x68\x65\x72\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x68\x61\x74\x20\x64\x6F\x6E\x27\x74\x20\x77\x69\x6E\x20\x74\x68\x65\x20\x72\x61\x63\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x31\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x32\x22\x29\x2C\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x73\x41\x50\x72\x6F\x6D\x69\x73\x65\x28\x22\x65\x78\x61\x6D\x70\x6C\x65\x20\x33\x22\x29\x2C\x0D\x0A\x09\x7D\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x2D\x2D\x20\x4F\x6E\x6C\x79\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x31\x73\x74\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x3A\x20\x7B\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x29\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x50\x52\x4F\x4D\x49\x53\x45\x5F\x49\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x69\x29\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x72\x65\x6A\x65\x63\x74\x29\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6E\x65\x77\x50\x72\x6F\x6D\x69\x73\x65\x73\x5B\x69\x5D\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x72\x65\x73\x6F\x6C\x76\x65\x29\x2C\x20\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x72\x65\x6A\x65\x63\x74\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x49\x74\x65\x72\x61\x74\x65\x73\x20\x73\x65\x72\x69\x61\x6C\x6C\x79\x20\x6F\x76\x65\x72\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x2C\x20\x63\x61\x6C\x6C\x69\x6E\x67\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x6F\x6E\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x62\x65\x66\x6F\x72\x65\x20\x63\x6F\x6E\x74\x69\x6E\x75\x69\x6E\x67\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x65\x20\x77\x61\x69\x74\x20\x66\x6F\x72\x20\x74\x68\x61\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x62\x65\x66\x6F\x72\x65\x20\x6D\x6F\x76\x69\x6E\x67\x20\x6F\x6E\x20\x74\x6F\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x69\x74\x65\x6D\x0D\x0A\x09\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x69\x6E\x66\x6F\x0D\x0A\x09\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x69\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6C\x6C\x60\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x72\x61\x6E\x20\x69\x6E\x20\x6F\x72\x64\x65\x72\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x61\x6C\x6C\x20\x61\x74\x20\x6F\x6E\x63\x65\x2E\x0D\x0A\x0D\x0A\x09\x42\x75\x74\x20\x62\x65\x63\x61\x75\x73\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x65\x61\x67\x65\x72\x2C\x20\x62\x79\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x20\x74\x68\x65\x79\x20\x61\x72\x65\x20\x63\x72\x65\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x79\x27\x72\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x75\x6E\x6E\x69\x6E\x67\x2E\x20\x54\x68\x75\x73\x2C\x20\x77\x65\x20\x6E\x65\x65\x64\x20\x61\x20\x77\x61\x79\x20\x74\x6F\x20\x64\x65\x66\x65\x72\x20\x63\x72\x65\x61\x74\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x75\x6E\x74\x69\x6C\x20\x61\x20\x6C\x61\x74\x65\x72\x20\x74\x69\x6D\x65\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x65\x78\x69\x73\x74\x73\x20\x61\x73\x20\x61\x20\x77\x61\x79\x20\x66\x6F\x72\x20\x75\x73\x20\x74\x6F\x20\x6F\x70\x65\x72\x61\x74\x65\x20\x6F\x6E\x20\x6F\x75\x72\x20\x64\x61\x74\x61\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x61\x20\x6E\x65\x77\x20\x63\x6C\x6F\x73\x75\x72\x65\x20\x66\x6F\x72\x20\x65\x61\x63\x68\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x77\x6F\x75\x6C\x64\x20\x70\x72\x65\x66\x65\x72\x2C\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x70\x61\x73\x73\x20\x69\x6E\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x2C\x20\x61\x6E\x64\x20\x69\x6E\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x2C\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x69\x74\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x7B\x0D\x0A\x09\x09\x22\x66\x6F\x6F\x22\x2C\x0D\x0A\x09\x09\x22\x62\x61\x72\x22\x2C\x0D\x0A\x09\x09\x22\x62\x61\x7A\x22\x2C\x0D\x0A\x09\x09\x22\x71\x75\x78\x22\x0D\x0A\x09\x7D\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x70\x72\x69\x6E\x74\x28\x28\x22\x25\x64\x29\x20\x47\x6F\x74\x20\x25\x73\x21\x22\x29\x3A\x66\x6F\x72\x6D\x61\x74\x28\x69\x6E\x64\x65\x78\x2C\x20\x76\x61\x6C\x75\x65\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x2D\x2D\x5B\x5B\x0D\x0A\x09\x09\x28\x31\x20\x73\x65\x63\x6F\x6E\x64\x20\x70\x61\x73\x73\x65\x73\x29\x0D\x0A\x09\x09\x3E\x20\x31\x29\x20\x47\x6F\x74\x20\x66\x6F\x6F\x21\x0D\x0A\x09\x09\x28\x31\x20\x73\x65\x63\x6F\x6E\x64\x20\x70\x61\x73\x73\x65\x73\x29\x0D\x0A\x09\x09\x3E\x20\x32\x29\x20\x47\x6F\x74\x20\x62\x61\x72\x21\x0D\x0A\x09\x09\x28\x31\x20\x73\x65\x63\x6F\x6E\x64\x20\x70\x61\x73\x73\x65\x73\x29\x0D\x0A\x09\x09\x3E\x20\x33\x29\x20\x47\x6F\x74\x20\x62\x61\x7A\x21\x0D\x0A\x09\x09\x28\x31\x20\x73\x65\x63\x6F\x6E\x64\x20\x70\x61\x73\x73\x65\x73\x29\x0D\x0A\x09\x09\x3E\x20\x34\x29\x20\x47\x6F\x74\x20\x71\x75\x78\x21\x0D\x0A\x09\x5D\x5D\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x61\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x72\x65\x6A\x65\x63\x74\x73\x2C\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x69\x73\x20\x61\x6C\x73\x6F\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x63\x6F\x6E\x74\x61\x69\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x68\x65\x6E\x20\x77\x65\x20\x67\x65\x74\x20\x74\x6F\x20\x74\x68\x61\x74\x20\x70\x6F\x69\x6E\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x2C\x20\x77\x65\x20\x77\x61\x69\x74\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x62\x65\x66\x6F\x72\x65\x20\x63\x61\x6C\x6C\x69\x6E\x67\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x68\x65\x6E\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x2C\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x77\x69\x74\x68\x20\x74\x68\x61\x74\x20\x76\x61\x6C\x75\x65\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x20\x28\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x6C\x6C\x20\x6E\x65\x76\x65\x72\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x65\x76\x65\x6E\x20\x6F\x6E\x63\x65\x29\x2E\x20\x49\x66\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x2C\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x77\x69\x74\x68\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x60\x29\x2E\x20\x49\x66\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x73\x20\x53\x74\x61\x72\x74\x65\x64\x20\x61\x74\x20\x66\x69\x72\x73\x74\x2C\x20\x62\x75\x74\x20\x6C\x61\x74\x65\x72\x20\x72\x65\x6A\x65\x63\x74\x73\x2C\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x61\x74\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x63\x6F\x6E\x74\x69\x6E\x75\x65\x20\x6F\x6E\x63\x65\x20\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x73\x20\x74\x68\x61\x74\x20\x76\x61\x6C\x75\x65\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x6F\x6E\x74\x61\x69\x6E\x69\x6E\x67\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x74\x68\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x2F\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x66\x6F\x72\x20\x65\x61\x63\x68\x20\x69\x74\x65\x6D\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x60\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x6F\x72\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x66\x6F\x72\x20\x61\x6E\x79\x20\x72\x65\x61\x73\x6F\x6E\x2C\x20\x74\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x61\x72\x65\x20\x74\x72\x75\x65\x3A\x0D\x0A\x09\x2D\x20\x49\x74\x65\x72\x61\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x63\x6F\x6E\x74\x69\x6E\x75\x65\x2E\x0D\x0A\x09\x2D\x20\x41\x6E\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x77\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x79\x20\x68\x61\x76\x65\x20\x6E\x6F\x20\x6F\x74\x68\x65\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x2E\x0D\x0A\x09\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x6C\x79\x20\x61\x63\x74\x69\x76\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x69\x74\x20\x68\x61\x73\x6E\x27\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x79\x65\x74\x2E\x0D\x0A\x0D\x0A\x09\x40\x73\x69\x6E\x63\x65\x20\x33\x2E\x30\x2E\x30\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6C\x69\x73\x74\x20\x7B\x54\x20\x7C\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x7D\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x28\x76\x61\x6C\x75\x65\x3A\x20\x54\x2C\x20\x69\x6E\x64\x65\x78\x3A\x20\x6E\x75\x6D\x62\x65\x72\x29\x20\x2D\x3E\x20\x55\x20\x7C\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x55\x3E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x7B\x55\x7D\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x28\x6C\x69\x73\x74\x2C\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x6C\x69\x73\x74\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x4C\x49\x53\x54\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x22\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x70\x72\x65\x64\x69\x63\x61\x74\x65\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x22\x29\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x54\x6F\x43\x61\x6E\x63\x65\x6C\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x70\x72\x6F\x6D\x69\x73\x65\x54\x6F\x43\x61\x6E\x63\x65\x6C\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x54\x6F\x43\x61\x6E\x63\x65\x6C\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x54\x6F\x43\x61\x6E\x63\x65\x6C\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x20\x74\x68\x65\x20\x6C\x69\x73\x74\x20\x6F\x66\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x6E\x64\x20\x6C\x6F\x6F\x6B\x20\x66\x6F\x72\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x49\x66\x20\x77\x65\x20\x66\x69\x6E\x64\x20\x73\x6F\x6D\x65\x2C\x20\x77\x65\x20\x6D\x75\x73\x74\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x6F\x75\x72\x20\x61\x6E\x64\x54\x68\x65\x6E\x20\x63\x61\x6C\x6C\x73\x20\x6E\x6F\x77\x2C\x20\x73\x6F\x20\x74\x68\x61\x74\x20\x74\x68\x6F\x73\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x68\x61\x76\x65\x20\x61\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x0D\x0A\x09\x09\x2D\x2D\x20\x66\x72\x6F\x6D\x20\x75\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x2E\x20\x49\x66\x20\x77\x65\x20\x64\x6F\x6E\x27\x74\x20\x64\x6F\x20\x74\x68\x69\x73\x2C\x20\x74\x68\x6F\x73\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x6D\x69\x67\x68\x74\x20\x67\x65\x74\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x62\x79\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x65\x6C\x73\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x62\x65\x66\x6F\x72\x65\x20\x77\x65\x20\x67\x65\x74\x20\x74\x6F\x20\x74\x68\x65\x6D\x20\x69\x6E\x20\x74\x68\x65\x20\x73\x65\x72\x69\x65\x73\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x74\x27\x73\x20\x6E\x6F\x74\x20\x70\x6F\x73\x73\x69\x62\x6C\x65\x20\x74\x6F\x20\x74\x65\x6C\x6C\x20\x74\x68\x61\x74\x20\x77\x65\x20\x70\x6C\x61\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x69\x74\x0D\x0A\x09\x09\x2D\x2D\x20\x75\x6E\x6C\x65\x73\x73\x20\x77\x65\x20\x69\x6E\x64\x69\x63\x61\x74\x65\x20\x69\x74\x20\x68\x65\x72\x65\x2E\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x4C\x69\x73\x74\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x6E\x64\x65\x78\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x6C\x69\x73\x74\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x22\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x77\x61\x73\x20\x70\x61\x72\x74\x20\x6F\x66\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x61\x74\x20\x69\x6E\x64\x65\x78\x20\x25\x64\x20\x70\x61\x73\x73\x65\x64\x20\x69\x6E\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x77\x61\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x65\x61\x63\x68\x20\x62\x65\x67\x61\x6E\x2E\x5C\x6E\x5C\x6E\x54\x68\x61\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x25\x73\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x69\x6E\x64\x65\x78\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x76\x61\x6C\x75\x65\x2E\x5F\x73\x6F\x75\x72\x63\x65\x0D\x0A\x09\x09\x09\x09\x09\x09\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x76\x61\x6C\x75\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x73\x65\x6C\x65\x63\x74\x28\x32\x2C\x20\x76\x61\x6C\x75\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x2D\x2D\x20\x43\x68\x61\x69\x6E\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x6F\x6E\x65\x20\x73\x6F\x20\x77\x65\x20\x6F\x6E\x6C\x79\x20\x63\x61\x6E\x63\x65\x6C\x20\x6F\x75\x72\x73\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x75\x72\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x76\x61\x6C\x75\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x54\x6F\x43\x61\x6E\x63\x65\x6C\x2C\x20\x6F\x75\x72\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x09\x09\x09\x09\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x4C\x69\x73\x74\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x6F\x75\x72\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x4C\x69\x73\x74\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x6E\x64\x65\x78\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x70\x72\x65\x70\x72\x6F\x63\x65\x73\x73\x65\x64\x4C\x69\x73\x74\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x0D\x0A\x09\x09\x09\x09\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x76\x61\x6C\x75\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x70\x72\x65\x64\x69\x63\x61\x74\x65\x28\x76\x61\x6C\x75\x65\x2C\x20\x69\x6E\x64\x65\x78\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x73\x54\x6F\x43\x61\x6E\x63\x65\x6C\x2C\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x50\x72\x6F\x6D\x69\x73\x65\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x72\x65\x73\x75\x6C\x74\x20\x3D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x73\x75\x6C\x74\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x73\x75\x6C\x74\x73\x5B\x69\x6E\x64\x65\x78\x5D\x20\x3D\x20\x72\x65\x73\x75\x6C\x74\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x72\x65\x73\x75\x6C\x74\x73\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x68\x65\x63\x6B\x73\x20\x77\x68\x65\x74\x68\x65\x72\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x6F\x62\x6A\x65\x63\x74\x20\x69\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x76\x69\x61\x20\x64\x75\x63\x6B\x20\x74\x79\x70\x69\x6E\x67\x2E\x20\x54\x68\x69\x73\x20\x6F\x6E\x6C\x79\x20\x63\x68\x65\x63\x6B\x73\x20\x69\x66\x20\x74\x68\x65\x20\x6F\x62\x6A\x65\x63\x74\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x68\x61\x73\x20\x61\x6E\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x6D\x65\x74\x68\x6F\x64\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6F\x62\x6A\x65\x63\x74\x20\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x2D\x2D\x20\x60\x74\x72\x75\x65\x60\x20\x69\x66\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x60\x6F\x62\x6A\x65\x63\x74\x60\x20\x69\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x6F\x62\x6A\x65\x63\x74\x29\x0D\x0A\x09\x69\x66\x20\x74\x79\x70\x65\x28\x6F\x62\x6A\x65\x63\x74\x29\x20\x7E\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x20\x3D\x20\x67\x65\x74\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x28\x6F\x62\x6A\x65\x63\x74\x29\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x61\x6D\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x6C\x69\x62\x72\x61\x72\x79\x2E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x69\x66\x20\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x4E\x6F\x20\x6D\x65\x74\x61\x74\x61\x62\x6C\x65\x2C\x20\x62\x75\x74\x20\x77\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x73\x74\x69\x6C\x6C\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x74\x61\x62\x6C\x65\x73\x20\x77\x69\x74\x68\x20\x61\x6E\x64\x54\x68\x65\x6E\x20\x6D\x65\x74\x68\x6F\x64\x73\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x79\x70\x65\x28\x6F\x62\x6A\x65\x63\x74\x2E\x61\x6E\x64\x54\x68\x65\x6E\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x0D\x0A\x09\x65\x6C\x73\x65\x69\x66\x0D\x0A\x09\x09\x74\x79\x70\x65\x28\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x0D\x0A\x09\x09\x61\x6E\x64\x20\x74\x79\x70\x65\x28\x72\x61\x77\x67\x65\x74\x28\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x2C\x20\x22\x5F\x5F\x69\x6E\x64\x65\x78\x22\x29\x29\x20\x3D\x3D\x20\x22\x74\x61\x62\x6C\x65\x22\x0D\x0A\x09\x09\x61\x6E\x64\x20\x74\x79\x70\x65\x28\x72\x61\x77\x67\x65\x74\x28\x72\x61\x77\x67\x65\x74\x28\x6F\x62\x6A\x65\x63\x74\x4D\x65\x74\x61\x74\x61\x62\x6C\x65\x2C\x20\x22\x5F\x5F\x69\x6E\x64\x65\x78\x22\x29\x2C\x20\x22\x61\x6E\x64\x54\x68\x65\x6E\x22\x29\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x0D\x0A\x09\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x4D\x61\x79\x62\x65\x20\x74\x68\x69\x73\x20\x63\x61\x6D\x65\x20\x66\x72\x6F\x6D\x20\x61\x20\x64\x69\x66\x66\x65\x72\x65\x6E\x74\x20\x6F\x72\x20\x6F\x6C\x64\x65\x72\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6C\x69\x62\x72\x61\x72\x79\x2E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x57\x72\x61\x70\x73\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x79\x69\x65\x6C\x64\x73\x20\x69\x6E\x74\x6F\x20\x6F\x6E\x65\x20\x74\x68\x61\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x41\x6E\x79\x20\x65\x72\x72\x6F\x72\x73\x20\x74\x68\x61\x74\x20\x6F\x63\x63\x75\x72\x20\x77\x68\x69\x6C\x65\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x74\x75\x72\x6E\x65\x64\x20\x69\x6E\x74\x6F\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x69\x6E\x66\x6F\x0D\x0A\x09\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x60\x20\x69\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x74\x72\x79\x5D\x28\x23\x74\x72\x79\x29\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x73\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x61\x73\x20\x61\x20\x63\x61\x6C\x6C\x61\x62\x6C\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x62\x65\x69\x6E\x67\x20\x69\x6E\x76\x6F\x6B\x65\x64\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x6C\x65\x65\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x77\x61\x69\x74\x29\x0D\x0A\x0D\x0A\x09\x73\x6C\x65\x65\x70\x28\x31\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x70\x72\x69\x6E\x74\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x69\x73\x50\x6C\x61\x79\x65\x72\x49\x6E\x47\x72\x6F\x75\x70\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x6C\x61\x79\x65\x72\x2C\x20\x67\x72\x6F\x75\x70\x49\x64\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x6C\x61\x79\x65\x72\x3A\x49\x73\x49\x6E\x47\x72\x6F\x75\x70\x28\x67\x72\x6F\x75\x70\x49\x64\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x6D\x69\x73\x69\x66\x79\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x72\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x61\x66\x74\x65\x72\x20\x60\x73\x65\x63\x6F\x6E\x64\x73\x60\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x68\x61\x76\x65\x20\x70\x61\x73\x73\x65\x64\x2E\x20\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x61\x63\x74\x75\x61\x6C\x20\x61\x6D\x6F\x75\x6E\x74\x20\x6F\x66\x20\x74\x69\x6D\x65\x20\x74\x68\x61\x74\x20\x77\x61\x73\x20\x77\x61\x69\x74\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x69\x73\x20\x2A\x2A\x6E\x6F\x74\x2A\x2A\x20\x61\x20\x77\x72\x61\x70\x70\x65\x72\x20\x61\x72\x6F\x75\x6E\x64\x20\x60\x77\x61\x69\x74\x60\x2E\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x60\x20\x75\x73\x65\x73\x20\x61\x20\x63\x75\x73\x74\x6F\x6D\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x20\x77\x68\x69\x63\x68\x20\x70\x72\x6F\x76\x69\x64\x65\x73\x20\x6D\x6F\x72\x65\x20\x61\x63\x63\x75\x72\x61\x74\x65\x20\x74\x69\x6D\x69\x6E\x67\x2E\x20\x41\x73\x20\x61\x6E\x20\x6F\x70\x74\x69\x6D\x69\x7A\x61\x74\x69\x6F\x6E\x2C\x20\x63\x61\x6E\x63\x65\x6C\x6C\x69\x6E\x67\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x6E\x73\x74\x61\x6E\x74\x6C\x79\x20\x72\x65\x6D\x6F\x76\x65\x73\x20\x74\x68\x65\x20\x74\x61\x73\x6B\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x50\x61\x73\x73\x69\x6E\x67\x20\x60\x4E\x61\x4E\x60\x2C\x20\x69\x6E\x66\x69\x6E\x69\x74\x79\x2C\x20\x6F\x72\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x6C\x65\x73\x73\x20\x74\x68\x61\x6E\x20\x31\x2F\x36\x30\x20\x69\x73\x20\x65\x71\x75\x69\x76\x61\x6C\x65\x6E\x74\x20\x74\x6F\x20\x70\x61\x73\x73\x69\x6E\x67\x20\x31\x2F\x36\x30\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x35\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x28\x70\x72\x69\x6E\x74\x2C\x20\x22\x54\x68\x69\x73\x20\x70\x72\x69\x6E\x74\x73\x20\x61\x66\x74\x65\x72\x20\x35\x20\x73\x65\x63\x6F\x6E\x64\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x64\x65\x6C\x61\x79\x0D\x0A\x09\x40\x77\x69\x74\x68\x69\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x6E\x75\x6D\x62\x65\x72\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x64\x6F\x0D\x0A\x09\x2D\x2D\x20\x75\x73\x65\x73\x20\x61\x20\x73\x6F\x72\x74\x65\x64\x20\x64\x6F\x75\x62\x6C\x79\x20\x6C\x69\x6E\x6B\x65\x64\x20\x6C\x69\x73\x74\x20\x28\x71\x75\x65\x75\x65\x29\x20\x74\x6F\x20\x61\x63\x68\x69\x65\x76\x65\x20\x4F\x28\x31\x29\x20\x72\x65\x6D\x6F\x76\x65\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x73\x20\x61\x6E\x64\x20\x4F\x28\x6E\x29\x20\x66\x6F\x72\x20\x69\x6E\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x74\x68\x65\x20\x69\x6E\x69\x74\x69\x61\x6C\x20\x6E\x6F\x64\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x6C\x69\x6E\x6B\x65\x64\x20\x6C\x69\x73\x74\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x72\x73\x74\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x73\x65\x63\x6F\x6E\x64\x73\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x73\x65\x63\x6F\x6E\x64\x73\x29\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x2C\x20\x22\x42\x61\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x23\x31\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x2C\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x2E\x22\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x49\x66\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x69\x73\x20\x2D\x49\x4E\x46\x2C\x20\x49\x4E\x46\x2C\x20\x4E\x61\x4E\x2C\x20\x6F\x72\x20\x6C\x65\x73\x73\x20\x74\x68\x61\x6E\x20\x31\x20\x2F\x20\x36\x30\x2C\x20\x61\x73\x73\x75\x6D\x65\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x69\x73\x20\x31\x20\x2F\x20\x36\x30\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x69\x73\x20\x6D\x69\x72\x72\x6F\x72\x73\x20\x74\x68\x65\x20\x62\x65\x68\x61\x76\x69\x6F\x72\x20\x6F\x66\x20\x77\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x28\x73\x65\x63\x6F\x6E\x64\x73\x20\x3E\x3D\x20\x31\x20\x2F\x20\x36\x30\x29\x20\x6F\x72\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x3D\x3D\x20\x6D\x61\x74\x68\x2E\x68\x75\x67\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x73\x20\x3D\x20\x31\x20\x2F\x20\x36\x30\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x5F\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x67\x65\x74\x54\x69\x6D\x65\x28\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x6E\x64\x54\x69\x6D\x65\x20\x3D\x20\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x20\x2B\x20\x73\x65\x63\x6F\x6E\x64\x73\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x6F\x64\x65\x20\x3D\x20\x7B\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x09\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x20\x3D\x20\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x2C\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x54\x69\x6D\x65\x20\x3D\x20\x65\x6E\x64\x54\x69\x6D\x65\x2C\x0D\x0A\x09\x09\x09\x7D\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x20\x2D\x2D\x20\x66\x69\x72\x73\x74\x20\x69\x73\x20\x6E\x69\x6C\x20\x77\x68\x65\x6E\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x69\x73\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x68\x72\x65\x61\x64\x53\x74\x61\x72\x74\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x67\x65\x74\x54\x69\x6D\x65\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x77\x68\x69\x6C\x65\x20\x66\x69\x72\x73\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x66\x69\x72\x73\x74\x2E\x65\x6E\x64\x54\x69\x6D\x65\x20\x3C\x20\x74\x68\x72\x65\x61\x64\x53\x74\x61\x72\x74\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x3D\x20\x66\x69\x72\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x63\x75\x72\x72\x65\x6E\x74\x2E\x6E\x65\x78\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x09\x69\x66\x20\x66\x69\x72\x73\x74\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x75\x72\x72\x65\x6E\x74\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x67\x65\x74\x54\x69\x6D\x65\x28\x29\x20\x2D\x20\x63\x75\x72\x72\x65\x6E\x74\x2E\x73\x74\x61\x72\x74\x54\x69\x6D\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x20\x2D\x2D\x20\x66\x69\x72\x73\x74\x20\x69\x73\x20\x6E\x6F\x6E\x2D\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x66\x69\x72\x73\x74\x2E\x65\x6E\x64\x54\x69\x6D\x65\x20\x3C\x20\x65\x6E\x64\x54\x69\x6D\x65\x20\x74\x68\x65\x6E\x20\x2D\x2D\x20\x69\x66\x20\x60\x6E\x6F\x64\x65\x60\x20\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x70\x6C\x61\x63\x65\x64\x20\x61\x66\x74\x65\x72\x20\x60\x66\x69\x72\x73\x74\x60\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x77\x65\x20\x77\x69\x6C\x6C\x20\x69\x6E\x73\x65\x72\x74\x20\x60\x6E\x6F\x64\x65\x60\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x60\x63\x75\x72\x72\x65\x6E\x74\x60\x20\x61\x6E\x64\x20\x60\x6E\x65\x78\x74\x60\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x28\x69\x2E\x65\x2E\x20\x61\x66\x74\x65\x72\x20\x60\x63\x75\x72\x72\x65\x6E\x74\x60\x20\x69\x66\x20\x60\x6E\x65\x78\x74\x60\x20\x69\x73\x20\x6E\x69\x6C\x29\x0D\x0A\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x3D\x20\x66\x69\x72\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x78\x74\x20\x3D\x20\x63\x75\x72\x72\x65\x6E\x74\x2E\x6E\x65\x78\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x77\x68\x69\x6C\x65\x20\x6E\x65\x78\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x6E\x65\x78\x74\x2E\x65\x6E\x64\x54\x69\x6D\x65\x20\x3C\x20\x65\x6E\x64\x54\x69\x6D\x65\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x75\x72\x72\x65\x6E\x74\x20\x3D\x20\x6E\x65\x78\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x65\x78\x74\x20\x3D\x20\x63\x75\x72\x72\x65\x6E\x74\x2E\x6E\x65\x78\x74\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x60\x63\x75\x72\x72\x65\x6E\x74\x60\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x6E\x6F\x6E\x2D\x6E\x69\x6C\x2C\x20\x62\x75\x74\x20\x60\x6E\x65\x78\x74\x60\x20\x63\x6F\x75\x6C\x64\x20\x62\x65\x20\x60\x6E\x69\x6C\x60\x20\x28\x69\x2E\x65\x2E\x20\x6C\x61\x73\x74\x20\x69\x74\x65\x6D\x20\x69\x6E\x20\x6C\x69\x73\x74\x29\x0D\x0A\x09\x09\x09\x09\x09\x63\x75\x72\x72\x65\x6E\x74\x2E\x6E\x65\x78\x74\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x09\x6E\x6F\x64\x65\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x63\x75\x72\x72\x65\x6E\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x6E\x65\x78\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x6F\x64\x65\x2E\x6E\x65\x78\x74\x20\x3D\x20\x6E\x65\x78\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x65\x78\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x73\x65\x74\x20\x60\x6E\x6F\x64\x65\x60\x20\x74\x6F\x20\x60\x66\x69\x72\x73\x74\x60\x0D\x0A\x09\x09\x09\x09\x09\x6E\x6F\x64\x65\x2E\x6E\x65\x78\x74\x20\x3D\x20\x66\x69\x72\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x6E\x6F\x64\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x2D\x2D\x20\x72\x65\x6D\x6F\x76\x65\x20\x6E\x6F\x64\x65\x20\x66\x72\x6F\x6D\x20\x71\x75\x65\x75\x65\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x65\x78\x74\x20\x3D\x20\x6E\x6F\x64\x65\x2E\x6E\x65\x78\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x66\x69\x72\x73\x74\x20\x3D\x3D\x20\x6E\x6F\x64\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x6E\x65\x78\x74\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x20\x2D\x2D\x20\x69\x66\x20\x60\x6E\x6F\x64\x65\x60\x20\x69\x73\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x61\x6E\x64\x20\x6C\x61\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x65\x6C\x73\x65\x20\x2D\x2D\x20\x69\x66\x20\x60\x6E\x6F\x64\x65\x60\x20\x69\x73\x20\x60\x66\x69\x72\x73\x74\x60\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x74\x68\x65\x20\x6C\x61\x73\x74\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x65\x78\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x09\x66\x69\x72\x73\x74\x20\x3D\x20\x6E\x65\x78\x74\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x6E\x6F\x64\x65\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x0D\x0A\x09\x09\x09\x09\x09\x2D\x2D\x20\x73\x69\x6E\x63\x65\x20\x60\x6E\x6F\x64\x65\x60\x20\x69\x73\x20\x6E\x6F\x74\x20\x60\x66\x69\x72\x73\x74\x60\x2C\x20\x74\x68\x65\x6E\x20\x77\x65\x20\x6B\x6E\x6F\x77\x20\x60\x70\x72\x65\x76\x69\x6F\x75\x73\x60\x20\x69\x73\x20\x6E\x6F\x6E\x2D\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x09\x70\x72\x65\x76\x69\x6F\x75\x73\x2E\x6E\x65\x78\x74\x20\x3D\x20\x6E\x65\x78\x74\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x6E\x65\x78\x74\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x6E\x65\x78\x74\x2E\x70\x72\x65\x76\x69\x6F\x75\x73\x20\x3D\x20\x70\x72\x65\x76\x69\x6F\x75\x73\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x69\x66\x20\x74\x68\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x60\x73\x65\x63\x6F\x6E\x64\x73\x60\x20\x73\x65\x63\x6F\x6E\x64\x73\x2C\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x69\x66\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x20\x74\x69\x6D\x65\x20\x65\x78\x63\x65\x65\x64\x73\x20\x60\x73\x65\x63\x6F\x6E\x64\x73\x60\x2E\x20\x54\x68\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x6F\x75\x74\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x6A\x65\x63\x74\x73\x20\x77\x69\x74\x68\x20\x60\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x60\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x6E\x6F\x6E\x2D\x6E\x69\x6C\x2E\x20\x49\x66\x20\x61\x20\x60\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x60\x20\x69\x73\x20\x6E\x6F\x74\x20\x67\x69\x76\x65\x6E\x2C\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x54\x69\x6D\x65\x64\x4F\x75\x74\x29\x60\x2E\x20\x54\x68\x69\x73\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x68\x65\x63\x6B\x65\x64\x20\x77\x69\x74\x68\x20\x5B\x5B\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x5D\x5D\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x67\x65\x74\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x28\x29\x3A\x74\x69\x6D\x65\x6F\x75\x74\x28\x35\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x67\x6F\x74\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x61\x6E\x64\x20\x69\x74\x20\x6F\x6E\x6C\x79\x20\x74\x6F\x6F\x6B\x20\x61\x74\x20\x6D\x61\x78\x20\x35\x20\x73\x65\x63\x6F\x6E\x64\x73\x0D\x0A\x09\x65\x6E\x64\x29\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x65\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x45\x69\x74\x68\x65\x72\x20\x67\x65\x74\x74\x69\x6E\x67\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x66\x61\x69\x6C\x65\x64\x20\x6F\x72\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x20\x77\x61\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x28\x65\x2C\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x54\x69\x6D\x65\x64\x4F\x75\x74\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x22\x4F\x70\x65\x72\x61\x74\x69\x6F\x6E\x20\x74\x69\x6D\x65\x64\x20\x6F\x75\x74\x21\x22\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x22\x4F\x70\x65\x72\x61\x74\x69\x6F\x6E\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x21\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x53\x75\x67\x61\x72\x20\x66\x6F\x72\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x73\x65\x63\x6F\x6E\x64\x73\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x09\x09\x61\x6E\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x20\x6B\x69\x6E\x64\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x54\x69\x6D\x65\x64\x4F\x75\x74\x20\x7D\x29\x0D\x0A\x09\x09\x09\x09\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x7D\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x69\x66\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x6F\x75\x74\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x74\x69\x6D\x65\x6F\x75\x74\x28\x73\x65\x63\x6F\x6E\x64\x73\x2C\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x61\x63\x65\x28\x7B\x0D\x0A\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x64\x65\x6C\x61\x79\x28\x73\x65\x63\x6F\x6E\x64\x73\x29\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x54\x69\x6D\x65\x64\x4F\x75\x74\x2C\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x54\x69\x6D\x65\x64\x20\x6F\x75\x74\x22\x2C\x0D\x0A\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x09\x22\x54\x69\x6D\x65\x6F\x75\x74\x20\x6F\x66\x20\x25\x64\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x2E\x5C\x6E\x3A\x74\x69\x6D\x65\x6F\x75\x74\x28\x29\x20\x63\x61\x6C\x6C\x65\x64\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x25\x73\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x73\x65\x63\x6F\x6E\x64\x73\x2C\x0D\x0A\x09\x09\x09\x09\x09\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x0D\x0A\x09\x09\x09\x09\x29\x2C\x0D\x0A\x09\x09\x09\x7D\x29\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x2C\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2C\x0D\x0A\x09\x7D\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x73\x74\x61\x74\x75\x73\x2E\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x53\x74\x61\x74\x75\x73\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x67\x65\x74\x53\x74\x61\x74\x75\x73\x28\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x72\x65\x61\x74\x65\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x63\x65\x69\x76\x65\x73\x20\x74\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x20\x6F\x66\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x61\x72\x65\x20\x69\x6E\x76\x6F\x6B\x65\x64\x20\x64\x65\x70\x65\x6E\x64\x69\x6E\x67\x20\x6F\x6E\x20\x74\x68\x61\x74\x20\x72\x65\x73\x75\x6C\x74\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x43\x72\x65\x61\x74\x65\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x66\x6F\x6C\x6C\x6F\x77\x20\x74\x68\x69\x73\x20\x70\x61\x72\x74\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x68\x61\x69\x6E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x2D\x2D\x20\x4F\x75\x72\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x6A\x75\x73\x74\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x73\x20\x6F\x6E\x74\x6F\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x54\x68\x69\x73\x20\x6C\x65\x74\x73\x20\x73\x75\x63\x63\x65\x73\x73\x20\x61\x6E\x64\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x63\x61\x73\x63\x61\x64\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x6C\x79\x21\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x73\x75\x63\x63\x65\x73\x73\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x63\x72\x65\x61\x74\x65\x41\x64\x76\x61\x6E\x63\x65\x72\x28\x0D\x0A\x09\x09\x09\x09\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x09\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x69\x66\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x63\x72\x65\x61\x74\x65\x41\x64\x76\x61\x6E\x63\x65\x72\x28\x0D\x0A\x09\x09\x09\x09\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x49\x66\x20\x77\x65\x20\x68\x61\x76\x65\x6E\x27\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x79\x65\x74\x2C\x20\x70\x75\x74\x20\x6F\x75\x72\x73\x65\x6C\x76\x65\x73\x20\x69\x6E\x74\x6F\x20\x74\x68\x65\x20\x71\x75\x65\x75\x65\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x73\x6F\x6C\x76\x65\x2C\x20\x73\x75\x63\x63\x65\x73\x73\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x54\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x68\x61\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x21\x20\x54\x72\x69\x67\x67\x65\x72\x20\x73\x75\x63\x63\x65\x73\x73\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x2E\x0D\x0A\x09\x09\x09\x73\x75\x63\x63\x65\x73\x73\x43\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x54\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x64\x69\x65\x64\x20\x61\x20\x74\x65\x72\x72\x69\x62\x6C\x65\x20\x64\x65\x61\x74\x68\x21\x20\x54\x72\x69\x67\x67\x65\x72\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x69\x6D\x6D\x65\x64\x69\x61\x74\x65\x6C\x79\x2E\x0D\x0A\x09\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x57\x65\x20\x64\x6F\x6E\x27\x74\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x63\x61\x6C\x6C\x20\x74\x68\x65\x20\x73\x75\x63\x63\x65\x73\x73\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x6F\x72\x20\x74\x68\x65\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x2C\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x77\x65\x20\x6A\x75\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x6F\x75\x74\x72\x69\x67\x68\x74\x2E\x0D\x0A\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x22\x2C\x0D\x0A\x09\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x41\x6C\x72\x65\x61\x64\x79\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x0D\x0A\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x5C\x6E\x5C\x6E\x22\x20\x2E\x2E\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x73\x65\x6C\x66\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x68\x61\x69\x6E\x73\x20\x6F\x6E\x74\x6F\x20\x61\x6E\x20\x65\x78\x69\x73\x74\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x57\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x6E\x65\x76\x65\x72\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x2E\x20\x53\x6F\x6D\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x61\x72\x65\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x65\x64\x20\x62\x79\x20\x5B\x5B\x45\x72\x72\x6F\x72\x5D\x5D\x20\x6F\x62\x6A\x65\x63\x74\x73\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x74\x72\x65\x61\x74\x20\x69\x74\x20\x61\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x66\x6F\x72\x20\x64\x65\x62\x75\x67\x67\x69\x6E\x67\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x60\x74\x6F\x73\x74\x72\x69\x6E\x67\x60\x20\x6F\x6E\x20\x69\x74\x20\x66\x69\x72\x73\x74\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x73\x75\x63\x63\x65\x73\x73\x20\x6F\x72\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x61\x6E\x64\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x6E\x74\x6F\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x3F\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x73\x75\x63\x63\x65\x73\x73\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x68\x6F\x72\x74\x68\x61\x6E\x64\x20\x66\x6F\x72\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x6E\x69\x6C\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x29\x60\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x69\x66\x20\x74\x68\x65\x20\x60\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x60\x20\x77\x6F\x72\x6B\x65\x64\x20\x77\x69\x74\x68\x6F\x75\x74\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x69\x6E\x67\x20\x61\x6E\x20\x61\x64\x64\x69\x74\x69\x6F\x6E\x61\x6C\x20\x65\x72\x72\x6F\x72\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x57\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x66\x61\x69\x6C\x75\x72\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x6E\x65\x76\x65\x72\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x2E\x20\x53\x6F\x6D\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x61\x72\x65\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x65\x64\x20\x62\x79\x20\x5B\x5B\x45\x72\x72\x6F\x72\x5D\x5D\x20\x6F\x62\x6A\x65\x63\x74\x73\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x74\x72\x65\x61\x74\x20\x69\x74\x20\x61\x73\x20\x61\x20\x73\x74\x72\x69\x6E\x67\x20\x66\x6F\x72\x20\x64\x65\x62\x75\x67\x67\x69\x6E\x67\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x63\x61\x6C\x6C\x20\x60\x74\x6F\x73\x74\x72\x69\x6E\x67\x60\x20\x6F\x6E\x20\x69\x74\x20\x66\x69\x72\x73\x74\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x66\x61\x69\x6C\x75\x72\x65\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x63\x61\x74\x63\x68\x28\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x74\x63\x68\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x6E\x69\x6C\x2C\x20\x66\x61\x69\x6C\x75\x72\x65\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x64\x54\x68\x65\x6E\x5D\x28\x23\x61\x6E\x64\x54\x68\x65\x6E\x29\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x74\x68\x65\x20\x72\x65\x74\x75\x72\x6E\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x61\x73\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x70\x61\x73\x73\x65\x64\x20\x74\x6F\x20\x74\x68\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x2E\x20\x49\x6E\x20\x6F\x74\x68\x65\x72\x20\x77\x6F\x72\x64\x73\x2C\x20\x79\x6F\x75\x20\x63\x61\x6E\x20\x69\x6E\x73\x65\x72\x74\x20\x61\x20\x60\x3A\x74\x61\x70\x60\x20\x69\x6E\x74\x6F\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x20\x77\x69\x74\x68\x6F\x75\x74\x20\x61\x66\x66\x65\x63\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x61\x74\x20\x64\x6F\x77\x6E\x73\x74\x72\x65\x61\x6D\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x72\x65\x63\x65\x69\x76\x65\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x67\x65\x74\x54\x68\x65\x56\x61\x6C\x75\x65\x28\x29\x0D\x0A\x09\x09\x3A\x74\x61\x70\x28\x70\x72\x69\x6E\x74\x29\x0D\x0A\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x74\x68\x65\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x47\x6F\x74\x22\x2C\x20\x74\x68\x65\x56\x61\x6C\x75\x65\x2C\x20\x22\x65\x76\x65\x6E\x20\x74\x68\x6F\x75\x67\x68\x20\x70\x72\x69\x6E\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x6E\x69\x6C\x21\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x79\x6F\x75\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x74\x61\x70\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x69\x74\x73\x20\x76\x61\x6C\x75\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x64\x69\x73\x63\x61\x72\x64\x65\x64\x20\x62\x75\x74\x20\x60\x74\x61\x70\x60\x20\x77\x69\x6C\x6C\x20\x73\x74\x69\x6C\x6C\x20\x77\x61\x69\x74\x20\x75\x6E\x74\x69\x6C\x20\x69\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x62\x65\x66\x6F\x72\x65\x20\x70\x61\x73\x73\x69\x6E\x67\x20\x74\x68\x65\x20\x6F\x72\x69\x67\x69\x6E\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x72\x6F\x75\x67\x68\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x74\x61\x70\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x74\x61\x70\x28\x74\x61\x70\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x74\x61\x70\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x74\x61\x70\x22\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x52\x65\x74\x75\x72\x6E\x20\x3D\x20\x74\x61\x70\x43\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x52\x65\x74\x75\x72\x6E\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x52\x65\x74\x75\x72\x6E\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x6E\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x63\x61\x6C\x6C\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x70\x72\x65\x64\x65\x66\x69\x6E\x65\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x20\x54\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x64\x69\x73\x63\x61\x72\x64\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x28\x73\x6F\x6D\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x2C\x20\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x6F\x6D\x65\x46\x75\x6E\x63\x74\x69\x6F\x6E\x28\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x41\x64\x64\x69\x74\x69\x6F\x6E\x61\x6C\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x77\x68\x69\x63\x68\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x70\x61\x73\x73\x65\x64\x20\x74\x6F\x20\x60\x63\x61\x6C\x6C\x62\x61\x63\x6B\x60\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x22\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x6E\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x64\x69\x73\x63\x61\x72\x64\x73\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x69\x74\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x61\x72\x65\x20\x65\x61\x67\x65\x72\x2C\x20\x73\x6F\x20\x69\x66\x20\x79\x6F\x75\x20\x70\x61\x73\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x6F\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x60\x2C\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x67\x69\x6E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x62\x65\x66\x6F\x72\x65\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x60\x20\x69\x73\x20\x72\x65\x61\x63\x68\x65\x64\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x68\x61\x69\x6E\x2E\x20\x4C\x69\x6B\x65\x77\x69\x73\x65\x2C\x20\x69\x66\x20\x79\x6F\x75\x20\x70\x61\x73\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x66\x72\x6F\x6D\x20\x5B\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x5D\x5D\x20\x69\x6E\x74\x6F\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x60\x2C\x20\x69\x74\x27\x73\x20\x70\x6F\x73\x73\x69\x62\x6C\x65\x20\x74\x68\x61\x74\x20\x74\x68\x69\x73\x20\x77\x69\x6C\x6C\x20\x74\x72\x69\x67\x67\x65\x72\x20\x74\x68\x65\x20\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x77\x61\x72\x6E\x69\x6E\x67\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x69\x74\x27\x73\x20\x75\x73\x75\x61\x6C\x6C\x79\x20\x62\x65\x73\x74\x20\x70\x72\x61\x63\x74\x69\x63\x65\x20\x74\x6F\x20\x75\x73\x65\x20\x5B\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x6E\x64\x54\x68\x65\x6E\x5D\x5D\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x20\x2D\x2D\x20\x56\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x52\x65\x74\x75\x72\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x61\x6E\x63\x65\x6C\x73\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2C\x20\x70\x72\x65\x76\x65\x6E\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x72\x65\x73\x6F\x6C\x76\x69\x6E\x67\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6E\x67\x2E\x20\x44\x6F\x65\x73\x20\x6E\x6F\x74\x20\x64\x6F\x20\x61\x6E\x79\x74\x68\x69\x6E\x67\x20\x69\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x73\x65\x74\x74\x6C\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x43\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x73\x20\x77\x69\x6C\x6C\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x65\x20\x75\x70\x77\x61\x72\x64\x73\x20\x61\x6E\x64\x20\x64\x6F\x77\x6E\x77\x61\x72\x64\x73\x20\x74\x68\x72\x6F\x75\x67\x68\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x77\x69\x6C\x6C\x20\x6F\x6E\x6C\x79\x20\x62\x65\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x69\x66\x20\x61\x6C\x6C\x20\x6F\x66\x20\x74\x68\x65\x69\x72\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x61\x72\x65\x20\x61\x6C\x73\x6F\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x73\x20\x74\x6F\x20\x73\x61\x79\x20\x74\x68\x61\x74\x20\x69\x66\x20\x79\x6F\x75\x20\x63\x61\x6C\x6C\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x74\x77\x69\x63\x65\x20\x6F\x6E\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x2C\x20\x61\x6E\x64\x20\x79\x6F\x75\x20\x63\x61\x6E\x63\x65\x6C\x20\x6F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x68\x69\x6C\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x73\x2C\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x63\x61\x6E\x63\x65\x6C\x20\x74\x68\x65\x20\x70\x61\x72\x65\x6E\x74\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x6F\x74\x68\x65\x72\x20\x63\x68\x69\x6C\x64\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x61\x6C\x73\x6F\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x48\x6F\x6F\x6B\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x70\x61\x72\x65\x6E\x74\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x70\x61\x72\x65\x6E\x74\x3A\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x28\x73\x65\x6C\x66\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x66\x6F\x72\x20\x63\x68\x69\x6C\x64\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x55\x73\x65\x64\x20\x74\x6F\x20\x64\x65\x63\x72\x65\x61\x73\x65\x20\x74\x68\x65\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x62\x79\x20\x31\x2C\x20\x61\x6E\x64\x20\x69\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6E\x6F\x20\x6D\x6F\x72\x65\x2C\x0D\x0A\x09\x63\x61\x6E\x63\x65\x6C\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x28\x63\x6F\x6E\x73\x75\x6D\x65\x72\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x63\x6F\x6E\x73\x75\x6D\x65\x72\x5D\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x6E\x65\x78\x74\x28\x73\x65\x6C\x66\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x55\x73\x65\x64\x20\x74\x6F\x20\x73\x65\x74\x20\x61\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x66\x6F\x72\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2C\x20\x72\x65\x6A\x65\x63\x74\x73\x2C\x20\x6F\x72\x20\x69\x73\x0D\x0A\x09\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x20\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x6F\x6E\x6C\x79\x4F\x6B\x29\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x6F\x6E\x6C\x79\x4F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x52\x65\x74\x75\x72\x6E\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x66\x66\x20\x6F\x66\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x72\x65\x73\x6F\x6C\x76\x65\x0D\x0A\x09\x09\x69\x66\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x63\x72\x65\x61\x74\x65\x41\x64\x76\x61\x6E\x63\x65\x72\x28\x0D\x0A\x09\x09\x09\x09\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x2C\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6F\x6E\x6C\x79\x4F\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x72\x65\x73\x6F\x6C\x76\x65\x28\x73\x65\x6C\x66\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x6E\x6F\x74\x20\x73\x65\x74\x74\x6C\x65\x64\x2C\x20\x73\x6F\x20\x71\x75\x65\x75\x65\x20\x74\x68\x69\x73\x2E\x0D\x0A\x09\x09\x09\x74\x61\x62\x6C\x65\x2E\x69\x6E\x73\x65\x72\x74\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x46\x69\x6E\x61\x6C\x6C\x79\x2C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x54\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x73\x65\x74\x74\x6C\x65\x64\x20\x6F\x72\x20\x77\x61\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x72\x75\x6E\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x6E\x6F\x77\x2E\x0D\x0A\x09\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x62\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x73\x65\x6C\x66\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x65\x74\x20\x61\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x72\x65\x67\x61\x72\x64\x6C\x65\x73\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x27\x73\x20\x66\x61\x74\x65\x2E\x20\x54\x68\x65\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x2C\x20\x2A\x6F\x72\x2A\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x61\x6E\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x66\x66\x20\x6F\x66\x20\x69\x74\x20\x77\x69\x74\x68\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x77\x6F\x6E\x27\x74\x20\x72\x75\x6E\x2E\x20\x4F\x6E\x6C\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x77\x69\x74\x68\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x6F\x72\x20\x60\x64\x6F\x6E\x65\x60\x20\x77\x69\x6C\x6C\x20\x72\x75\x6E\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x61\x73\x65\x20\x6F\x66\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x68\x69\x6E\x67\x20\x3D\x20\x63\x72\x65\x61\x74\x65\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x28\x29\x0D\x0A\x0D\x0A\x09\x64\x6F\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x57\x69\x74\x68\x28\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x49\x74\x20\x77\x6F\x72\x6B\x65\x64\x21\x22\x29\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x64\x6F\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x2E\x2E\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x22\x4F\x68\x20\x6E\x6F\x20\x69\x74\x20\x66\x61\x69\x6C\x65\x64\x21\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x09\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x65\x69\x74\x68\x65\x72\x20\x77\x61\x79\x2C\x20\x64\x65\x73\x74\x72\x6F\x79\x20\x74\x68\x69\x6E\x67\x0D\x0A\x0D\x0A\x09\x09\x09\x74\x68\x69\x6E\x67\x3A\x44\x65\x73\x74\x72\x6F\x79\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x73\x74\x61\x74\x75\x73\x3A\x20\x53\x74\x61\x74\x75\x73\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x61\x6D\x65\x20\x61\x73\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x60\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x66\x6F\x72\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x2E\x0D\x0A\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x63\x61\x6C\x6C\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x70\x72\x65\x64\x65\x66\x69\x6E\x65\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x41\x64\x64\x69\x74\x69\x6F\x6E\x61\x6C\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x77\x68\x69\x63\x68\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x70\x61\x73\x73\x65\x64\x20\x74\x6F\x20\x60\x63\x61\x6C\x6C\x62\x61\x63\x6B\x60\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x43\x61\x6C\x6C\x22\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x64\x69\x73\x63\x61\x72\x64\x73\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x69\x74\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x52\x65\x74\x75\x72\x6E\x28\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x20\x2D\x2D\x20\x56\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x52\x65\x74\x75\x72\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x65\x74\x20\x61\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x63\x61\x6C\x6C\x65\x64\x20\x6F\x6E\x6C\x79\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x6F\x72\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x20\x54\x68\x69\x73\x20\x6D\x65\x74\x68\x6F\x64\x20\x69\x73\x20\x73\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x69\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x63\x61\x74\x63\x68\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x60\x64\x6F\x6E\x65\x60\x20\x73\x68\x6F\x75\x6C\x64\x20\x62\x65\x20\x72\x65\x73\x65\x72\x76\x65\x64\x20\x73\x70\x65\x63\x69\x66\x69\x63\x61\x6C\x6C\x79\x20\x77\x68\x65\x6E\x20\x79\x6F\x75\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x70\x65\x72\x66\x6F\x72\x6D\x20\x73\x6F\x6D\x65\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x66\x69\x6E\x69\x73\x68\x65\x64\x20\x28\x6C\x69\x6B\x65\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x29\x2C\x20\x62\x75\x74\x20\x79\x6F\x75\x20\x64\x6F\x6E\x27\x74\x20\x77\x61\x6E\x74\x20\x74\x6F\x20\x63\x6F\x6E\x73\x75\x6D\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x73\x20\x28\x6C\x69\x6B\x65\x20\x69\x6E\x20\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x2F\x72\x6F\x62\x6C\x6F\x78\x2D\x6C\x75\x61\x2D\x70\x72\x6F\x6D\x69\x73\x65\x2F\x6C\x69\x62\x2F\x45\x78\x61\x6D\x70\x6C\x65\x73\x2E\x68\x74\x6D\x6C\x23\x63\x61\x6E\x63\x65\x6C\x6C\x61\x62\x6C\x65\x2D\x61\x6E\x69\x6D\x61\x74\x69\x6F\x6E\x2D\x73\x65\x71\x75\x65\x6E\x63\x65\x22\x3E\x74\x68\x69\x73\x20\x65\x78\x61\x6D\x70\x6C\x65\x3C\x2F\x61\x3E\x29\x2E\x20\x59\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x75\x73\x65\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x69\x66\x20\x79\x6F\x75\x20\x6F\x6E\x6C\x79\x20\x63\x61\x72\x65\x20\x61\x62\x6F\x75\x74\x20\x74\x68\x65\x20\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x63\x61\x73\x65\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x77\x61\x72\x6E\x69\x6E\x67\x0D\x0A\x09\x4C\x69\x6B\x65\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x2C\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x61\x6E\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x6F\x66\x66\x20\x6F\x66\x20\x69\x74\x20\x77\x69\x74\x68\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x77\x6F\x6E\x27\x74\x20\x72\x75\x6E\x2E\x20\x4F\x6E\x6C\x79\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x77\x69\x74\x68\x20\x60\x64\x6F\x6E\x65\x60\x20\x61\x6E\x64\x20\x60\x66\x69\x6E\x61\x6C\x6C\x79\x60\x20\x77\x69\x6C\x6C\x20\x72\x75\x6E\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x61\x73\x65\x20\x6F\x66\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x6E\x65\x77\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x64\x6F\x6E\x65\x48\x61\x6E\x64\x6C\x65\x72\x20\x28\x73\x74\x61\x74\x75\x73\x3A\x20\x53\x74\x61\x74\x75\x73\x29\x20\x2D\x3E\x20\x2E\x2E\x2E\x61\x6E\x79\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x2E\x2E\x2E\x61\x6E\x79\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x64\x6F\x6E\x65\x28\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x0D\x0A\x09\x09\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x6F\x72\x20\x74\x79\x70\x65\x28\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x0D\x0A\x09\x09\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x22\x29\x0D\x0A\x09\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x69\x6E\x61\x6C\x6C\x79\x48\x61\x6E\x64\x6C\x65\x72\x2C\x20\x74\x72\x75\x65\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x53\x61\x6D\x65\x20\x61\x73\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x43\x61\x6C\x6C\x60\x2C\x20\x65\x78\x63\x65\x70\x74\x20\x66\x6F\x72\x20\x60\x64\x6F\x6E\x65\x60\x2E\x0D\x0A\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x20\x60\x64\x6F\x6E\x65\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x63\x61\x6C\x6C\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x70\x72\x65\x64\x65\x66\x69\x6E\x65\x64\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x61\x6E\x79\x29\x20\x2D\x3E\x20\x61\x6E\x79\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x41\x64\x64\x69\x74\x69\x6F\x6E\x61\x6C\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x77\x68\x69\x63\x68\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x70\x61\x73\x73\x65\x64\x20\x74\x6F\x20\x60\x63\x61\x6C\x6C\x62\x61\x63\x6B\x60\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x64\x6F\x6E\x65\x43\x61\x6C\x6C\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x45\x52\x52\x4F\x52\x5F\x4E\x4F\x4E\x5F\x46\x55\x4E\x43\x54\x49\x4F\x4E\x2C\x20\x22\x50\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x43\x61\x6C\x6C\x22\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x74\x72\x75\x65\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x41\x74\x74\x61\x63\x68\x65\x73\x20\x61\x20\x60\x64\x6F\x6E\x65\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x74\x6F\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x64\x69\x73\x63\x61\x72\x64\x73\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x72\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x20\x66\x72\x6F\x6D\x20\x69\x74\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x52\x65\x74\x75\x72\x6E\x28\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x3A\x64\x6F\x6E\x65\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x22\x73\x6F\x6D\x65\x22\x2C\x20\x22\x76\x61\x6C\x75\x65\x73\x22\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x61\x6E\x79\x20\x2D\x2D\x20\x56\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x64\x6F\x6E\x65\x52\x65\x74\x75\x72\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x2C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x6C\x79\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6E\x64\x2C\x20\x74\x72\x75\x65\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x59\x69\x65\x6C\x64\x73\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x74\x68\x72\x65\x61\x64\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x73\x2E\x20\x52\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x27\x73\x20\x73\x74\x61\x74\x75\x73\x2C\x20\x66\x6F\x6C\x6C\x6F\x77\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x0D\x0A\x09\x40\x79\x69\x65\x6C\x64\x73\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x53\x74\x61\x74\x75\x73\x20\x2D\x2D\x20\x54\x68\x65\x20\x53\x74\x61\x74\x75\x73\x20\x72\x65\x70\x72\x65\x73\x65\x6E\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x66\x61\x74\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x28\x29\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x62\x69\x6E\x64\x61\x62\x6C\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x42\x69\x6E\x64\x61\x62\x6C\x65\x45\x76\x65\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x09\x09\x73\x65\x6C\x66\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x46\x69\x72\x65\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x2E\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x09\x09\x62\x69\x6E\x64\x61\x62\x6C\x65\x3A\x44\x65\x73\x74\x72\x6F\x79\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x2C\x20\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6C\x73\x65\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x2C\x20\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x61\x77\x61\x69\x74\x48\x65\x6C\x70\x65\x72\x28\x73\x74\x61\x74\x75\x73\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x2E\x2E\x2E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x59\x69\x65\x6C\x64\x73\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x74\x68\x72\x65\x61\x64\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x73\x2E\x20\x52\x65\x74\x75\x72\x6E\x73\x20\x74\x72\x75\x65\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x66\x6F\x6C\x6C\x6F\x77\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x63\x61\x75\x74\x69\x6F\x6E\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x67\x65\x74\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x60\x66\x61\x6C\x73\x65\x60\x2C\x20\x77\x68\x69\x63\x68\x20\x69\x73\x20\x69\x6E\x64\x69\x73\x74\x69\x6E\x67\x75\x69\x73\x68\x61\x62\x6C\x65\x20\x66\x72\x6F\x6D\x20\x61\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x2E\x20\x49\x66\x20\x79\x6F\x75\x20\x6E\x65\x65\x64\x20\x74\x6F\x20\x64\x69\x66\x66\x65\x72\x65\x6E\x74\x69\x61\x74\x65\x2C\x20\x79\x6F\x75\x20\x73\x68\x6F\x75\x6C\x64\x20\x75\x73\x65\x20\x5B\x5B\x50\x72\x6F\x6D\x69\x73\x65\x2E\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x5D\x5D\x20\x69\x6E\x73\x74\x65\x61\x64\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x77\x6F\x72\x6B\x65\x64\x2C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x67\x65\x74\x54\x68\x65\x56\x61\x6C\x75\x65\x28\x29\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x77\x6F\x72\x6B\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x67\x6F\x74\x22\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x77\x61\x72\x6E\x28\x22\x69\x74\x20\x66\x61\x69\x6C\x65\x64\x22\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x79\x69\x65\x6C\x64\x73\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x2D\x2D\x20\x60\x74\x72\x75\x65\x60\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x61\x77\x61\x69\x74\x48\x65\x6C\x70\x65\x72\x28\x73\x65\x6C\x66\x3A\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x65\x78\x70\x65\x63\x74\x48\x65\x6C\x70\x65\x72\x28\x73\x74\x61\x74\x75\x73\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x28\x2E\x2E\x2E\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x22\x45\x78\x70\x65\x63\x74\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x77\x69\x74\x68\x20\x6E\x6F\x20\x76\x61\x6C\x75\x65\x2E\x22\x20\x6F\x72\x20\x28\x2E\x2E\x2E\x29\x2C\x20\x33\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x59\x69\x65\x6C\x64\x73\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x74\x68\x72\x65\x61\x64\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x73\x2E\x20\x52\x65\x74\x75\x72\x6E\x73\x20\x74\x68\x65\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x77\x6F\x72\x6B\x65\x64\x20\x3D\x20\x70\x63\x61\x6C\x6C\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x67\x6F\x74\x22\x2C\x20\x67\x65\x74\x54\x68\x65\x56\x61\x6C\x75\x65\x28\x29\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x77\x6F\x72\x6B\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x77\x61\x72\x6E\x28\x22\x69\x74\x20\x66\x61\x69\x6C\x65\x64\x22\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x54\x68\x69\x73\x20\x69\x73\x20\x65\x73\x73\x65\x6E\x74\x69\x61\x6C\x6C\x79\x20\x73\x75\x67\x61\x72\x20\x66\x6F\x72\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x73\x65\x6C\x65\x63\x74\x28\x32\x2C\x20\x61\x73\x73\x65\x72\x74\x28\x70\x72\x6F\x6D\x69\x73\x65\x3A\x61\x77\x61\x69\x74\x28\x29\x29\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x2A\x2A\x45\x72\x72\x6F\x72\x73\x2A\x2A\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x6F\x72\x20\x67\x65\x74\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x0D\x0A\x09\x40\x65\x72\x72\x6F\x72\x20\x61\x6E\x79\x20\x2D\x2D\x20\x45\x72\x72\x6F\x72\x73\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x20\x69\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x73\x20\x6F\x72\x20\x67\x65\x74\x73\x20\x63\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2E\x0D\x0A\x09\x40\x79\x69\x65\x6C\x64\x73\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x77\x69\x74\x68\x2E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x65\x78\x70\x65\x63\x74\x28\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x65\x78\x70\x65\x63\x74\x48\x65\x6C\x70\x65\x72\x28\x73\x65\x6C\x66\x3A\x61\x77\x61\x69\x74\x53\x74\x61\x74\x75\x73\x28\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x20\x42\x61\x63\x6B\x77\x61\x72\x64\x73\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x0D\x0A\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x2E\x61\x77\x61\x69\x74\x56\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x2E\x65\x78\x70\x65\x63\x74\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x49\x6E\x74\x65\x6E\x64\x65\x64\x20\x66\x6F\x72\x20\x75\x73\x65\x20\x69\x6E\x20\x74\x65\x73\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x53\x69\x6D\x69\x6C\x61\x72\x20\x74\x6F\x20\x61\x77\x61\x69\x74\x28\x29\x2C\x20\x62\x75\x74\x20\x69\x6E\x73\x74\x65\x61\x64\x20\x6F\x66\x20\x79\x69\x65\x6C\x64\x69\x6E\x67\x20\x69\x66\x20\x74\x68\x65\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x75\x6E\x72\x65\x73\x6F\x6C\x76\x65\x64\x2C\x0D\x0A\x09\x5F\x75\x6E\x77\x72\x61\x70\x20\x77\x69\x6C\x6C\x20\x74\x68\x72\x6F\x77\x2E\x20\x54\x68\x69\x73\x20\x69\x6E\x64\x69\x63\x61\x74\x65\x73\x20\x61\x6E\x20\x61\x73\x73\x75\x6D\x70\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x61\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x68\x61\x73\x0D\x0A\x09\x72\x65\x73\x6F\x6C\x76\x65\x64\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x75\x6E\x77\x72\x61\x70\x28\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x20\x68\x61\x73\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x2E\x22\x2C\x20\x32\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x75\x6E\x70\x61\x63\x6B\x28\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x28\x2E\x2E\x2E\x29\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x28\x2E\x2E\x2E\x29\x3A\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x28\x73\x65\x6C\x66\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x20\x77\x61\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x65\x20\x63\x68\x61\x69\x6E\x20\x6F\x6E\x74\x6F\x20\x69\x74\x21\x0D\x0A\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x69\x73\x28\x28\x2E\x2E\x2E\x29\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x69\x74\x68\x6F\x75\x74\x20\x74\x68\x69\x73\x20\x77\x61\x72\x6E\x69\x6E\x67\x2C\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x73\x6F\x6D\x65\x74\x69\x6D\x65\x73\x20\x6D\x79\x73\x74\x65\x72\x69\x6F\x75\x73\x6C\x79\x20\x64\x69\x73\x61\x70\x70\x65\x61\x72\x0D\x0A\x09\x09\x69\x66\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x20\x3E\x20\x31\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x22\x57\x68\x65\x6E\x20\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x61\x6E\x64\x54\x68\x65\x6E\x2C\x20\x65\x78\x74\x72\x61\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x61\x72\x65\x20\x22\x20\x2E\x2E\x0D\x0A\x09\x09\x09\x09\x22\x64\x69\x73\x63\x61\x72\x64\x65\x64\x21\x20\x53\x65\x65\x3A\x5C\x6E\x5C\x6E\x25\x73\x22\x2C\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x73\x6F\x75\x72\x63\x65\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x6D\x65\x73\x73\x61\x67\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x3D\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x3A\x5F\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x2C\x0D\x0A\x09\x09\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x79\x62\x65\x52\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x20\x3D\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x76\x61\x6C\x75\x65\x73\x5B\x31\x5D\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x2D\x2D\x20\x42\x61\x63\x6B\x77\x61\x72\x64\x73\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x20\x3C\x20\x76\x32\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x65\x72\x72\x6F\x72\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x6D\x61\x79\x62\x65\x52\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x63\x68\x61\x69\x6E\x65\x64\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x65\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x22\x5B\x4E\x6F\x20\x73\x74\x61\x63\x6B\x20\x74\x72\x61\x63\x65\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x20\x61\x73\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6F\x72\x69\x67\x69\x6E\x61\x74\x65\x64\x20\x66\x72\x6F\x6D\x20\x61\x6E\x20\x6F\x6C\x64\x65\x72\x20\x76\x65\x72\x73\x69\x6F\x6E\x20\x6F\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6C\x69\x62\x72\x61\x72\x79\x20\x28\x3C\x20\x76\x32\x29\x5D\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x7D\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x28\x6D\x61\x79\x62\x65\x52\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x2C\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x45\x78\x65\x63\x75\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x72\x65\x6A\x65\x63\x74\x28\x6D\x61\x79\x62\x65\x52\x75\x6E\x74\x69\x6D\x65\x45\x72\x72\x6F\x72\x3A\x65\x78\x74\x65\x6E\x64\x28\x7B\x0D\x0A\x09\x09\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x54\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x74\x6F\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x74\x68\x61\x74\x20\x65\x72\x72\x6F\x72\x65\x64\x2E\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x74\x72\x61\x63\x65\x20\x3D\x20\x22\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x22\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x25\x73\x5C\x6E\x2E\x2E\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x74\x20\x77\x61\x73\x20\x63\x68\x61\x69\x6E\x65\x64\x20\x74\x6F\x20\x74\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x50\x72\x6F\x6D\x69\x73\x65\x2C\x20\x77\x68\x69\x63\x68\x20\x65\x6E\x63\x6F\x75\x6E\x74\x65\x72\x65\x64\x20\x61\x6E\x20\x65\x72\x72\x6F\x72\x3A\x5C\x6E\x22\x2C\x0D\x0A\x09\x09\x09\x09\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x73\x6F\x75\x72\x63\x65\x0D\x0A\x09\x09\x09\x09\x09\x09\x29\x2C\x0D\x0A\x09\x09\x09\x09\x09\x7D\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x3A\x5F\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x73\x65\x6C\x66\x3A\x63\x61\x6E\x63\x65\x6C\x28\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x41\x64\x6F\x70\x74\x20\x6F\x75\x72\x73\x65\x6C\x76\x65\x73\x20\x69\x6E\x74\x6F\x20\x70\x72\x6F\x6D\x69\x73\x65\x20\x66\x6F\x72\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x20\x70\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x70\x61\x72\x65\x6E\x74\x20\x3D\x20\x70\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x09\x09\x09\x70\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x5B\x73\x65\x6C\x66\x5D\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x57\x65\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x61\x74\x20\x74\x68\x65\x73\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x74\x68\x72\x6F\x77\x20\x65\x72\x72\x6F\x72\x73\x2E\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x73\x6F\x6C\x76\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x7E\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x53\x74\x61\x72\x74\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x6A\x65\x63\x74\x65\x64\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x4C\x65\x6E\x67\x74\x68\x2C\x20\x73\x65\x6C\x66\x2E\x5F\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x70\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x61\x6E\x79\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x68\x61\x6E\x64\x6C\x65\x72\x73\x2C\x20\x63\x61\x6C\x6C\x20\x74\x68\x6F\x73\x65\x21\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x73\x45\x6D\x70\x74\x79\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x61\x73\x73\x75\x6D\x65\x20\x74\x68\x61\x74\x20\x74\x68\x65\x73\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x74\x68\x72\x6F\x77\x20\x65\x72\x72\x6F\x72\x73\x2E\x0D\x0A\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x74\x20\x74\x68\x69\x73\x20\x70\x6F\x69\x6E\x74\x2C\x20\x6E\x6F\x20\x6F\x6E\x65\x20\x77\x61\x73\x20\x61\x62\x6C\x65\x20\x74\x6F\x20\x6F\x62\x73\x65\x72\x76\x65\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x2E\x0D\x0A\x09\x09\x2D\x2D\x20\x41\x6E\x20\x65\x72\x72\x6F\x72\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x6D\x69\x67\x68\x74\x20\x73\x74\x69\x6C\x6C\x20\x62\x65\x20\x61\x74\x74\x61\x63\x68\x65\x64\x20\x69\x66\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x20\x6F\x63\x63\x75\x72\x72\x65\x64\x0D\x0A\x09\x09\x2D\x2D\x20\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x6C\x79\x2E\x20\x57\x65\x27\x6C\x6C\x20\x77\x61\x69\x74\x20\x6F\x6E\x65\x20\x74\x69\x63\x6B\x2C\x20\x61\x6E\x64\x20\x69\x66\x20\x74\x68\x65\x72\x65\x20\x61\x72\x65\x20\x73\x74\x69\x6C\x6C\x20\x6E\x6F\x0D\x0A\x09\x09\x2D\x2D\x20\x6F\x62\x73\x65\x72\x76\x65\x72\x73\x2C\x20\x74\x68\x65\x6E\x20\x77\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x70\x75\x74\x20\x61\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x63\x6F\x6E\x73\x6F\x6C\x65\x2E\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x72\x72\x20\x3D\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x09\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x74\x69\x6D\x65\x45\x76\x65\x6E\x74\x3A\x57\x61\x69\x74\x28\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x53\x6F\x6D\x65\x6F\x6E\x65\x20\x6F\x62\x73\x65\x72\x76\x65\x64\x20\x74\x68\x65\x20\x65\x72\x72\x6F\x72\x2C\x20\x68\x6F\x6F\x72\x61\x79\x21\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x65\x6C\x66\x2E\x5F\x75\x6E\x68\x61\x6E\x64\x6C\x65\x64\x52\x65\x6A\x65\x63\x74\x69\x6F\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x42\x75\x69\x6C\x64\x20\x61\x20\x72\x65\x61\x73\x6F\x6E\x61\x62\x6C\x65\x20\x6D\x65\x73\x73\x61\x67\x65\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x3D\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x0D\x0A\x09\x09\x09\x09\x22\x55\x6E\x68\x61\x6E\x64\x6C\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x3A\x5C\x6E\x5C\x6E\x25\x73\x5C\x6E\x5C\x6E\x25\x73\x22\x2C\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x2C\x0D\x0A\x09\x09\x09\x09\x73\x65\x6C\x66\x2E\x5F\x73\x6F\x75\x72\x63\x65\x0D\x0A\x09\x09\x09\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x54\x45\x53\x54\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x2D\x2D\x20\x44\x6F\x6E\x27\x74\x20\x73\x70\x61\x6D\x20\x6F\x75\x74\x70\x75\x74\x20\x77\x68\x65\x6E\x20\x77\x65\x27\x72\x65\x20\x72\x75\x6E\x6E\x69\x6E\x67\x20\x74\x65\x73\x74\x73\x2E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x77\x61\x72\x6E\x28\x6D\x65\x73\x73\x61\x67\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x28\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x3A\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x0D\x0A\x09\x43\x61\x6C\x6C\x73\x20\x61\x6E\x79\x20\x3A\x66\x69\x6E\x61\x6C\x6C\x79\x20\x68\x61\x6E\x64\x6C\x65\x72\x73\x2E\x20\x57\x65\x20\x6E\x65\x65\x64\x20\x74\x68\x69\x73\x20\x74\x6F\x20\x62\x65\x20\x61\x20\x73\x65\x70\x61\x72\x61\x74\x65\x20\x6D\x65\x74\x68\x6F\x64\x20\x61\x6E\x64\x0D\x0A\x09\x71\x75\x65\x75\x65\x20\x62\x65\x63\x61\x75\x73\x65\x20\x77\x65\x20\x6D\x75\x73\x74\x20\x63\x61\x6C\x6C\x20\x61\x6C\x6C\x20\x6F\x66\x20\x74\x68\x65\x20\x66\x69\x6E\x61\x6C\x6C\x79\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x75\x70\x6F\x6E\x20\x61\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x0D\x0A\x09\x66\x61\x69\x6C\x75\x72\x65\x2C\x20\x2A\x61\x6E\x64\x2A\x20\x63\x61\x6E\x63\x65\x6C\x6C\x61\x74\x69\x6F\x6E\x2E\x0D\x0A\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x5F\x66\x69\x6E\x61\x6C\x69\x7A\x65\x28\x29\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x46\x69\x6E\x61\x6C\x6C\x79\x29\x20\x64\x6F\x0D\x0A\x09\x09\x2D\x2D\x20\x50\x75\x72\x70\x6F\x73\x65\x66\x75\x6C\x6C\x79\x20\x6E\x6F\x74\x20\x70\x61\x73\x73\x69\x6E\x67\x20\x76\x61\x6C\x75\x65\x73\x20\x74\x6F\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x73\x20\x68\x65\x72\x65\x2C\x20\x61\x73\x20\x69\x74\x20\x63\x6F\x75\x6C\x64\x20\x62\x65\x20\x74\x68\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x76\x61\x6C\x75\x65\x73\x2C\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x65\x72\x72\x6F\x72\x73\x2E\x20\x49\x66\x20\x74\x68\x65\x20\x64\x65\x76\x65\x6C\x6F\x70\x65\x72\x20\x6E\x65\x65\x64\x73\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x2C\x0D\x0A\x09\x09\x2D\x2D\x20\x74\x68\x65\x79\x20\x73\x68\x6F\x75\x6C\x64\x20\x75\x73\x65\x20\x3A\x61\x6E\x64\x54\x68\x65\x6E\x20\x6F\x72\x20\x3A\x63\x61\x74\x63\x68\x20\x65\x78\x70\x6C\x69\x63\x69\x74\x6C\x79\x2E\x0D\x0A\x09\x09\x63\x6F\x72\x6F\x75\x74\x69\x6E\x65\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x46\x69\x6E\x61\x6C\x6C\x79\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x6A\x65\x63\x74\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x73\x65\x6C\x66\x2E\x5F\x71\x75\x65\x75\x65\x64\x52\x65\x73\x6F\x6C\x76\x65\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x0D\x0A\x09\x2D\x2D\x20\x43\x6C\x65\x61\x72\x20\x72\x65\x66\x65\x72\x65\x6E\x63\x65\x73\x20\x74\x6F\x20\x6F\x74\x68\x65\x72\x20\x50\x72\x6F\x6D\x69\x73\x65\x73\x20\x74\x6F\x20\x61\x6C\x6C\x6F\x77\x20\x67\x63\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x54\x45\x53\x54\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x70\x61\x72\x65\x6E\x74\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x73\x65\x6C\x66\x2E\x5F\x63\x6F\x6E\x73\x75\x6D\x65\x72\x73\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x68\x61\x69\x6E\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x69\x73\x20\x6F\x6E\x65\x20\x74\x68\x61\x74\x20\x69\x73\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x69\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x2C\x20\x61\x6E\x64\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x69\x66\x20\x69\x74\x20\x69\x73\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x61\x74\x20\x74\x68\x65\x20\x74\x69\x6D\x65\x20\x6F\x66\x20\x63\x61\x6C\x6C\x69\x6E\x67\x20\x60\x3A\x6E\x6F\x77\x28\x29\x60\x2E\x20\x54\x68\x69\x73\x20\x63\x61\x6E\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6F\x20\x65\x6E\x73\x75\x72\x65\x20\x79\x6F\x75\x72\x20\x60\x61\x6E\x64\x54\x68\x65\x6E\x60\x20\x68\x61\x6E\x64\x6C\x65\x72\x20\x6F\x63\x63\x75\x72\x73\x20\x6F\x6E\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x66\x72\x61\x6D\x65\x20\x61\x73\x20\x74\x68\x65\x20\x72\x6F\x6F\x74\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x65\x78\x65\x63\x75\x74\x69\x6F\x6E\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x64\x6F\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x28\x29\x0D\x0A\x09\x09\x3A\x6E\x6F\x77\x28\x29\x0D\x0A\x09\x09\x3A\x61\x6E\x64\x54\x68\x65\x6E\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x70\x72\x69\x6E\x74\x28\x22\x47\x6F\x74\x22\x2C\x20\x76\x61\x6C\x75\x65\x2C\x20\x22\x73\x79\x6E\x63\x68\x72\x6F\x6E\x6F\x75\x73\x6C\x79\x2E\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x20\x73\x74\x69\x6C\x6C\x20\x72\x75\x6E\x6E\x69\x6E\x67\x2C\x20\x52\x65\x6A\x65\x63\x74\x65\x64\x2C\x20\x6F\x72\x20\x43\x61\x6E\x63\x65\x6C\x6C\x65\x64\x2C\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x60\x3A\x6E\x6F\x77\x28\x29\x60\x20\x77\x69\x6C\x6C\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x60\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x60\x20\x69\x66\x20\x70\x61\x73\x73\x65\x64\x2C\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x20\x77\x69\x74\x68\x20\x61\x20\x60\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x28\x50\x72\x6F\x6D\x69\x73\x65\x2E\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x4E\x6F\x74\x52\x65\x73\x6F\x6C\x76\x65\x64\x49\x6E\x54\x69\x6D\x65\x29\x60\x2E\x20\x54\x68\x69\x73\x20\x63\x61\x6E\x20\x62\x65\x20\x63\x68\x65\x63\x6B\x65\x64\x20\x77\x69\x74\x68\x20\x5B\x5B\x45\x72\x72\x6F\x72\x2E\x69\x73\x4B\x69\x6E\x64\x5D\x5D\x2E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x3F\x20\x61\x6E\x79\x20\x2D\x2D\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x69\x73\x6E\x27\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x70\x72\x6F\x74\x6F\x74\x79\x70\x65\x3A\x6E\x6F\x77\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x20\x3D\x20\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x0D\x0A\x09\x69\x66\x20\x73\x65\x6C\x66\x2E\x5F\x73\x74\x61\x74\x75\x73\x20\x3D\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x53\x74\x61\x74\x75\x73\x2E\x52\x65\x73\x6F\x6C\x76\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x73\x65\x6C\x66\x3A\x5F\x61\x6E\x64\x54\x68\x65\x6E\x28\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x61\x6E\x64\x20\x45\x72\x72\x6F\x72\x2E\x6E\x65\x77\x28\x7B\x0D\x0A\x09\x09\x09\x6B\x69\x6E\x64\x20\x3D\x20\x45\x72\x72\x6F\x72\x2E\x4B\x69\x6E\x64\x2E\x4E\x6F\x74\x52\x65\x73\x6F\x6C\x76\x65\x64\x49\x6E\x54\x69\x6D\x65\x2C\x0D\x0A\x09\x09\x09\x65\x72\x72\x6F\x72\x20\x3D\x20\x22\x54\x68\x69\x73\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x61\x73\x20\x6E\x6F\x74\x20\x72\x65\x73\x6F\x6C\x76\x65\x64\x20\x69\x6E\x20\x74\x69\x6D\x65\x20\x66\x6F\x72\x20\x3A\x6E\x6F\x77\x28\x29\x22\x2C\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x22\x3A\x6E\x6F\x77\x28\x29\x20\x77\x61\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x61\x74\x3A\x5C\x6E\x5C\x6E\x22\x20\x2E\x2E\x20\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x2C\x0D\x0A\x09\x09\x7D\x29\x20\x6F\x72\x20\x72\x65\x6A\x65\x63\x74\x69\x6F\x6E\x56\x61\x6C\x75\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x52\x65\x70\x65\x61\x74\x65\x64\x6C\x79\x20\x63\x61\x6C\x6C\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x2D\x72\x65\x74\x75\x72\x6E\x69\x6E\x67\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x75\x70\x20\x74\x6F\x20\x60\x74\x69\x6D\x65\x73\x60\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x74\x69\x6D\x65\x73\x2C\x20\x75\x6E\x74\x69\x6C\x20\x74\x68\x65\x20\x72\x65\x74\x75\x72\x6E\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x49\x66\x20\x74\x68\x65\x20\x61\x6D\x6F\x75\x6E\x74\x20\x6F\x66\x20\x72\x65\x74\x72\x69\x65\x73\x20\x69\x73\x20\x65\x78\x63\x65\x65\x64\x65\x64\x2C\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x68\x65\x20\x6C\x61\x74\x65\x73\x74\x20\x72\x65\x6A\x65\x63\x74\x65\x64\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x63\x61\x6E\x46\x61\x69\x6C\x28\x61\x2C\x20\x62\x2C\x20\x63\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x6E\x65\x77\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x72\x65\x6A\x65\x63\x74\x29\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x64\x6F\x20\x73\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x74\x68\x61\x74\x20\x63\x61\x6E\x20\x66\x61\x69\x6C\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x61\x69\x6C\x65\x64\x2C\x20\x74\x68\x69\x6E\x67\x20\x3D\x20\x64\x6F\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x54\x68\x61\x74\x43\x61\x6E\x46\x61\x69\x6C\x28\x61\x2C\x20\x62\x2C\x20\x63\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x66\x61\x69\x6C\x65\x64\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x6A\x65\x63\x74\x28\x22\x69\x74\x20\x66\x61\x69\x6C\x65\x64\x22\x29\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x74\x68\x69\x6E\x67\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x4D\x41\x58\x5F\x52\x45\x54\x52\x49\x45\x53\x20\x3D\x20\x31\x30\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x63\x61\x6E\x46\x61\x69\x6C\x2C\x20\x4D\x41\x58\x5F\x52\x45\x54\x52\x49\x45\x53\x2C\x20\x22\x66\x6F\x6F\x22\x2C\x20\x22\x62\x61\x72\x22\x2C\x20\x22\x62\x61\x7A\x22\x29\x20\x2D\x2D\x20\x61\x72\x67\x73\x20\x74\x6F\x20\x73\x65\x6E\x64\x20\x74\x6F\x20\x63\x61\x6E\x46\x61\x69\x6C\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x73\x69\x6E\x63\x65\x20\x33\x2E\x30\x2E\x30\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x28\x2E\x2E\x2E\x3A\x20\x50\x29\x20\x2D\x3E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x54\x3E\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x74\x69\x6D\x65\x73\x20\x6E\x75\x6D\x62\x65\x72\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x3F\x20\x50\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x74\x69\x6D\x65\x73\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x20\x3D\x3D\x20\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x2C\x20\x22\x50\x61\x72\x61\x6D\x65\x74\x65\x72\x20\x23\x31\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x79\x70\x65\x28\x74\x69\x6D\x65\x73\x29\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x2C\x20\x22\x50\x61\x72\x61\x6D\x65\x74\x65\x72\x20\x23\x32\x20\x74\x6F\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x22\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x2C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x7B\x2E\x2E\x2E\x7D\x2C\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x73\x6F\x6C\x76\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x29\x3A\x63\x61\x74\x63\x68\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x69\x6D\x65\x73\x20\x3E\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x74\x72\x79\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x74\x69\x6D\x65\x73\x20\x2D\x20\x31\x2C\x20\x75\x6E\x70\x61\x63\x6B\x28\x61\x72\x67\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x72\x65\x6A\x65\x63\x74\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x3D\x5B\x0D\x0A\x09\x43\x6F\x6E\x76\x65\x72\x74\x73\x20\x61\x6E\x20\x65\x76\x65\x6E\x74\x20\x69\x6E\x74\x6F\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x68\x69\x63\x68\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x74\x69\x6D\x65\x20\x74\x68\x65\x20\x65\x76\x65\x6E\x74\x20\x66\x69\x72\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x20\x60\x70\x72\x65\x64\x69\x63\x61\x74\x65\x60\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x69\x66\x20\x70\x61\x73\x73\x65\x64\x2C\x20\x77\x69\x6C\x6C\x20\x72\x65\x63\x65\x69\x76\x65\x20\x74\x68\x65\x20\x65\x76\x65\x6E\x74\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x61\x6E\x64\x20\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x74\x75\x72\x6E\x20\x60\x74\x72\x75\x65\x60\x20\x6F\x72\x20\x60\x66\x61\x6C\x73\x65\x60\x2C\x20\x62\x61\x73\x65\x64\x20\x6F\x6E\x20\x69\x66\x20\x74\x68\x69\x73\x20\x66\x69\x72\x65\x64\x20\x65\x76\x65\x6E\x74\x20\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x6F\x72\x20\x6E\x6F\x74\x2E\x20\x49\x66\x20\x60\x74\x72\x75\x65\x60\x2C\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x2E\x20\x49\x66\x20\x60\x66\x61\x6C\x73\x65\x60\x2C\x20\x6E\x6F\x74\x68\x69\x6E\x67\x20\x68\x61\x70\x70\x65\x6E\x73\x20\x61\x6E\x64\x20\x74\x68\x65\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x72\x65\x72\x75\x6E\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x74\x69\x6D\x65\x20\x74\x68\x65\x20\x65\x76\x65\x6E\x74\x20\x66\x69\x72\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x54\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x69\x6C\x6C\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x65\x76\x65\x6E\x74\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x2E\x0D\x0A\x0D\x0A\x09\x3A\x3A\x3A\x74\x69\x70\x0D\x0A\x09\x54\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x77\x6F\x72\x6B\x20\x67\x69\x76\x65\x6E\x20\x61\x6E\x79\x20\x6F\x62\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x60\x43\x6F\x6E\x6E\x65\x63\x74\x60\x20\x6D\x65\x74\x68\x6F\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x6E\x63\x6C\x75\x64\x65\x73\x20\x61\x6C\x6C\x20\x52\x6F\x62\x6C\x6F\x78\x20\x65\x76\x65\x6E\x74\x73\x2E\x0D\x0A\x09\x3A\x3A\x3A\x0D\x0A\x0D\x0A\x09\x60\x60\x60\x6C\x75\x61\x0D\x0A\x09\x2D\x2D\x20\x43\x72\x65\x61\x74\x65\x73\x20\x61\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x77\x68\x69\x63\x68\x20\x6F\x6E\x6C\x79\x20\x72\x65\x73\x6F\x6C\x76\x65\x73\x20\x77\x68\x65\x6E\x20\x60\x73\x6F\x6D\x65\x50\x61\x72\x74\x60\x20\x69\x73\x20\x74\x6F\x75\x63\x68\x65\x64\x0D\x0A\x09\x2D\x2D\x20\x62\x79\x20\x61\x20\x70\x61\x72\x74\x20\x6E\x61\x6D\x65\x64\x20\x60\x22\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x73\x70\x65\x63\x69\x66\x69\x63\x22\x60\x2E\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x28\x73\x6F\x6D\x65\x50\x61\x72\x74\x2E\x54\x6F\x75\x63\x68\x65\x64\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x70\x61\x72\x74\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x70\x61\x72\x74\x2E\x4E\x61\x6D\x65\x20\x3D\x3D\x20\x22\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x73\x70\x65\x63\x69\x66\x69\x63\x22\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x09\x60\x60\x60\x0D\x0A\x0D\x0A\x09\x40\x73\x69\x6E\x63\x65\x20\x33\x2E\x30\x2E\x30\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x76\x65\x6E\x74\x20\x45\x76\x65\x6E\x74\x20\x2D\x2D\x20\x41\x6E\x79\x20\x6F\x62\x6A\x65\x63\x74\x20\x77\x69\x74\x68\x20\x61\x20\x60\x43\x6F\x6E\x6E\x65\x63\x74\x60\x20\x6D\x65\x74\x68\x6F\x64\x2E\x20\x54\x68\x69\x73\x20\x69\x6E\x63\x6C\x75\x64\x65\x73\x20\x61\x6C\x6C\x20\x52\x6F\x62\x6C\x6F\x78\x20\x65\x76\x65\x6E\x74\x73\x2E\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x3F\x20\x28\x2E\x2E\x2E\x3A\x20\x50\x29\x20\x2D\x3E\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x2D\x2D\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x68\x69\x63\x68\x20\x64\x65\x74\x65\x72\x6D\x69\x6E\x65\x73\x20\x69\x66\x20\x74\x68\x65\x20\x50\x72\x6F\x6D\x69\x73\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x72\x65\x73\x6F\x6C\x76\x65\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x76\x61\x6C\x75\x65\x2C\x20\x6F\x72\x20\x77\x61\x69\x74\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x65\x76\x65\x6E\x74\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x2E\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x3C\x50\x3E\x0D\x0A\x5D\x3D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x28\x65\x76\x65\x6E\x74\x2C\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x29\x0D\x0A\x09\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x3D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x6F\x72\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x2E\x5F\x6E\x65\x77\x28\x64\x65\x62\x75\x67\x2E\x74\x72\x61\x63\x65\x62\x61\x63\x6B\x28\x6E\x69\x6C\x2C\x20\x32\x29\x2C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x72\x65\x73\x6F\x6C\x76\x65\x2C\x20\x5F\x2C\x20\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x68\x6F\x75\x6C\x64\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x20\x3D\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x3A\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x6E\x69\x6C\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x2D\x2D\x20\x57\x65\x20\x75\x73\x65\x20\x73\x68\x6F\x75\x6C\x64\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x20\x62\x65\x63\x61\x75\x73\x65\x20\x69\x66\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x67\x69\x76\x65\x6E\x20\x74\x6F\x20\x43\x6F\x6E\x6E\x65\x63\x74\x20\x69\x73\x20\x63\x61\x6C\x6C\x65\x64\x20\x62\x65\x66\x6F\x72\x65\x0D\x0A\x09\x09\x2D\x2D\x20\x43\x6F\x6E\x6E\x65\x63\x74\x20\x72\x65\x74\x75\x72\x6E\x73\x2C\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x73\x74\x69\x6C\x6C\x20\x62\x65\x20\x6E\x69\x6C\x2E\x20\x54\x68\x69\x73\x20\x68\x61\x70\x70\x65\x6E\x73\x20\x77\x69\x74\x68\x20\x65\x76\x65\x6E\x74\x73\x20\x74\x68\x61\x74\x20\x71\x75\x65\x75\x65\x20\x75\x70\x0D\x0A\x09\x09\x2D\x2D\x20\x65\x76\x65\x6E\x74\x73\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x72\x65\x27\x73\x20\x6E\x6F\x74\x68\x69\x6E\x67\x20\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x2C\x20\x73\x75\x63\x68\x20\x61\x73\x20\x52\x65\x6D\x6F\x74\x65\x45\x76\x65\x6E\x74\x73\x0D\x0A\x0D\x0A\x09\x09\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x65\x76\x65\x6E\x74\x3A\x43\x6F\x6E\x6E\x65\x63\x74\x28\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x56\x61\x6C\x75\x65\x20\x3D\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x69\x66\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x56\x61\x6C\x75\x65\x20\x3D\x3D\x20\x74\x72\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x73\x6F\x6C\x76\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x73\x68\x6F\x75\x6C\x64\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x20\x3D\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6C\x73\x65\x69\x66\x20\x74\x79\x70\x65\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x56\x61\x6C\x75\x65\x29\x20\x7E\x3D\x20\x22\x62\x6F\x6F\x6C\x65\x61\x6E\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x65\x72\x72\x6F\x72\x28\x22\x50\x72\x6F\x6D\x69\x73\x65\x2E\x66\x72\x6F\x6D\x45\x76\x65\x6E\x74\x20\x70\x72\x65\x64\x69\x63\x61\x74\x65\x20\x73\x68\x6F\x75\x6C\x64\x20\x61\x6C\x77\x61\x79\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x61\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x29\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x68\x6F\x75\x6C\x64\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x20\x61\x6E\x64\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x28\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6F\x6E\x43\x61\x6E\x63\x65\x6C\x28\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x29\x0D\x0A\x09\x65\x6E\x64\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x50\x72\x6F\x6D\x69\x73\x65\x0D\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x36\x39\x35\x37\x66\x37\x39\x38\x33\x61\x63\x30\x38\x61\x63\x61\x62\x66\x32\x32\x34\x32\x36\x36\x66\x33\x36\x35\x64\x33\x66\x37\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x31\x33\x33\x61\x39\x62\x30\x30\x35\x66\x62\x65\x61\x36\x62\x65\x61\x63\x31\x64\x30\x35\x39\x64\x64\x63\x39\x66\x65\x66\x30\x65\x87\xA2\x49\x64\xD9\x20\x31\x33\x33\x61\x39\x62\x30\x30\x35\x66\x62\x65\x61\x36\x62\x65\x61\x63\x31\x64\x30\x35\x39\x64\x64\x63\x39\x66\x65\x66\x30\x65\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xA4\x4E\x61\x6D\x65\xAC\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x01\xE7\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x29\x0A\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0A\x09\x52\x65\x6D\x6F\x74\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x22\x52\x65\x6D\x6F\x74\x65\x45\x76\x65\x6E\x74\x22\x29\x2C\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x2E\x61\x6E\x79\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x73\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x0A\x09\x09\x5B\x74\x2E\x73\x74\x72\x69\x6E\x67\x5D\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x7B\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x7D\x29\x2C\x0A\x09\x7D\x29\x2C\x0A\x7D\x29\x0A\x0A\x65\x78\x70\x6F\x72\x74\x20\x74\x79\x70\x65\x20\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x20\x3D\x20\x7B\x0A\x09\x52\x65\x6D\x6F\x74\x65\x3A\x20\x52\x65\x6D\x6F\x74\x65\x45\x76\x65\x6E\x74\x2C\x0A\x09\x43\x6F\x6E\x74\x65\x78\x74\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x2C\x0A\x09\x41\x63\x74\x69\x6F\x6E\x73\x3A\x20\x7B\x0A\x09\x09\x5B\x73\x74\x72\x69\x6E\x67\x5D\x3A\x20\x7B\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x20\x7D\x2C\x0A\x09\x7D\x2C\x0A\x7D\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x6F\x62\x6A\x29\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x69\x73\x43\x6F\x6E\x74\x65\x78\x74\x42\x6C\x6F\x63\x6B\x28\x6F\x62\x6A\x29\x20\x3A\x3A\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x0A\x65\x6E\x64\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x39\x39\x65\x61\x35\x37\x36\x35\x30\x30\x38\x31\x34\x31\x37\x66\x64\x32\x35\x36\x62\x37\x30\x39\x32\x63\x63\x64\x62\x61\x31\x39\x87\xA2\x49\x64\xD9\x20\x39\x39\x65\x61\x35\x37\x36\x35\x30\x30\x38\x31\x34\x31\x37\x66\x64\x32\x35\x36\x62\x37\x30\x39\x32\x63\x63\x64\x62\x61\x31\x39\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\xA4\x4E\x61\x6D\x65\xA2\x74\x73\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x61\x84\x2D\x2D\x20\x74\x3A\x20\x61\x20\x72\x75\x6E\x74\x69\x6D\x65\x20\x74\x79\x70\x65\x63\x68\x65\x63\x6B\x65\x72\x20\x66\x6F\x72\x20\x52\x6F\x62\x6C\x6F\x78\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x65\x67\x75\x6C\x61\x72\x20\x6C\x75\x61\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x6F\x66\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x20\x6F\x72\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x74\x79\x70\x65\x4E\x61\x6D\x65\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x74\x79\x70\x65\x4E\x61\x6D\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x6D\x61\x74\x63\x68\x65\x73\x20\x61\x6E\x79\x20\x74\x79\x70\x65\x20\x65\x78\x63\x65\x70\x74\x20\x6E\x69\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x61\x6E\x79\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x62\x6F\x6F\x6C\x65\x61\x6E\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x74\x68\x72\x65\x61\x64\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x74\x68\x72\x65\x61\x64\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x74\x68\x72\x65\x61\x64\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x74\x5B\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x5D\x20\x3D\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x6E\x6F\x6E\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x6F\x6E\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x6E\x69\x6C\x22\x29\x0D\x0A\x74\x5B\x22\x6E\x69\x6C\x22\x5D\x20\x3D\x20\x74\x2E\x6E\x6F\x6E\x65\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x73\x74\x72\x69\x6E\x67\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x73\x74\x72\x69\x6E\x67\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x73\x74\x72\x69\x6E\x67\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x74\x61\x62\x6C\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x75\x73\x65\x72\x64\x61\x74\x61\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x75\x73\x65\x72\x64\x61\x74\x61\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x75\x73\x65\x72\x64\x61\x74\x61\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x61\x6E\x64\x20\x6E\x6F\x6E\x2D\x4E\x61\x4E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3D\x3D\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x4E\x61\x4E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x61\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x6F\x62\x6C\x6F\x78\x20\x74\x79\x70\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x41\x78\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x41\x78\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x41\x78\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x46\x72\x61\x6D\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x46\x72\x61\x6D\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x46\x61\x63\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x46\x61\x63\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x46\x61\x63\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x49\x6E\x73\x74\x61\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x61\x6E\x64\x6F\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x61\x6E\x64\x6F\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x61\x6E\x64\x6F\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x61\x79\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x61\x79\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x61\x79\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x63\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x63\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x63\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x67\x69\x6F\x6E\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x67\x69\x6F\x6E\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x67\x69\x6F\x6E\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x55\x44\x69\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x55\x44\x69\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x55\x44\x69\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x55\x44\x69\x6D\x32\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x55\x44\x69\x6D\x32\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x55\x44\x69\x6D\x32\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x32\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x32\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x32\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x6F\x62\x6C\x6F\x78\x20\x65\x6E\x75\x6D\x20\x74\x79\x70\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x45\x6E\x75\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x45\x6E\x75\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x49\x74\x65\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x45\x6E\x75\x6D\x49\x74\x65\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x67\x69\x76\x65\x6E\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x54\x68\x65\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x69\x7A\x65\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x69\x7A\x65\x20\x3D\x3D\x20\x31\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x69\x74\x65\x72\x61\x6C\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x20\x3D\x20\x31\x2C\x20\x73\x69\x7A\x65\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x6C\x69\x74\x65\x72\x61\x6C\x73\x5B\x69\x5D\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x6C\x69\x74\x65\x72\x61\x6C\x73\x2C\x20\x31\x2C\x20\x73\x69\x7A\x65\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x44\x45\x50\x52\x45\x43\x41\x54\x45\x44\x0D\x0A\x09\x50\x6C\x65\x61\x73\x65\x20\x75\x73\x65\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x65\x78\x61\x63\x74\x6C\x79\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x6B\x65\x79\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x61\x73\x20\x61\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6B\x65\x79\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x67\x65\x74\x20\x6B\x65\x79\x73\x20\x66\x72\x6F\x6D\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6B\x65\x79\x4F\x66\x28\x6B\x65\x79\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x30\x0D\x0A\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x6B\x65\x79\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x6C\x65\x6E\x67\x74\x68\x20\x2B\x20\x31\x0D\x0A\x09\x09\x6B\x65\x79\x73\x5B\x6C\x65\x6E\x67\x74\x68\x5D\x20\x3D\x20\x6B\x65\x79\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x6B\x65\x79\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x61\x73\x20\x61\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x67\x65\x74\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x76\x61\x6C\x75\x65\x4F\x66\x28\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x30\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x6C\x65\x6E\x67\x74\x68\x20\x2B\x20\x31\x0D\x0A\x09\x09\x76\x61\x6C\x75\x65\x73\x5B\x6C\x65\x6E\x67\x74\x68\x5D\x20\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x69\x6E\x74\x65\x67\x65\x72\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x25\x20\x31\x20\x3D\x3D\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3E\x3D\x20\x6D\x69\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x6D\x61\x78\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x61\x78\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3E\x20\x30\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x75\x6D\x62\x65\x72\x50\x6F\x73\x69\x74\x69\x76\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x30\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x30\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4E\x65\x67\x61\x74\x69\x76\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x30\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x3D\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x28\x6D\x69\x6E\x2C\x20\x6D\x61\x78\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x69\x6E\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x61\x78\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x6D\x61\x78\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x2C\x20\x6D\x61\x78\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x69\x6E\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x61\x78\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x61\x78\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x73\x74\x72\x69\x6E\x67\x20\x70\x61\x74\x74\x65\x72\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x74\x72\x69\x6E\x67\x20\x70\x61\x74\x74\x65\x72\x6E\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6D\x61\x74\x63\x68\x28\x70\x61\x74\x74\x65\x72\x6E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x70\x61\x74\x74\x65\x72\x6E\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x74\x72\x69\x6E\x67\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x74\x72\x69\x6E\x67\x2E\x6D\x61\x74\x63\x68\x28\x76\x61\x6C\x75\x65\x2C\x20\x70\x61\x74\x74\x65\x72\x6E\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x65\x69\x74\x68\x65\x72\x20\x6E\x69\x6C\x20\x6F\x72\x20\x70\x61\x73\x73\x65\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x74\x75\x70\x6C\x65\x20\x61\x67\x61\x69\x6E\x73\x74\x20\x74\x75\x70\x6C\x65\x20\x74\x79\x70\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x74\x79\x70\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x74\x75\x70\x6C\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x61\x72\x67\x73\x5B\x69\x5D\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x69\x6E\x20\x67\x69\x76\x65\x6E\x20\x74\x61\x62\x6C\x65\x20\x70\x61\x73\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x6B\x65\x79\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6B\x65\x79\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x6B\x65\x79\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x6E\x20\x67\x69\x76\x65\x6E\x20\x74\x61\x62\x6C\x65\x20\x70\x61\x73\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x76\x61\x6C\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x70\x61\x73\x73\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x6B\x65\x79\x73\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6D\x61\x70\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x2C\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x65\x72\x20\x3D\x20\x74\x2E\x6B\x65\x79\x73\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x65\x72\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x65\x74\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6D\x61\x70\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x2C\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x72\x75\x65\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6B\x65\x79\x73\x28\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6D\x61\x74\x63\x68\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x63\x6F\x6D\x70\x61\x72\x65\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x74\x68\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x23\x20\x69\x73\x20\x75\x6E\x72\x65\x6C\x69\x61\x62\x6C\x65\x20\x66\x6F\x72\x20\x73\x70\x61\x72\x73\x65\x20\x61\x72\x72\x61\x79\x73\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x43\x6F\x75\x6E\x74\x20\x75\x70\x77\x61\x72\x64\x73\x20\x75\x73\x69\x6E\x67\x20\x69\x70\x61\x69\x72\x73\x20\x74\x6F\x20\x61\x76\x6F\x69\x64\x20\x66\x61\x6C\x73\x65\x20\x70\x6F\x73\x69\x74\x69\x76\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x62\x65\x68\x61\x76\x69\x6F\x72\x20\x6F\x66\x20\x23\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x3D\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x20\x3C\x20\x31\x20\x6F\x72\x20\x6B\x65\x79\x20\x3E\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x76\x61\x6C\x75\x65\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x61\x20\x73\x74\x72\x69\x63\x74\x20\x6D\x61\x6B\x65\x75\x70\x20\x61\x6E\x64\x20\x73\x69\x7A\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x63\x6F\x6D\x70\x61\x72\x65\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x74\x68\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x27\x73\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x74\x68\x65\x20\x73\x65\x74\x20\x61\x72\x72\x61\x79\x20\x73\x69\x7A\x65\x2C\x20\x64\x69\x73\x61\x6C\x6C\x6F\x77\x0D\x0A\x09\x09\x09\x69\x66\x20\x23\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x20\x3C\x20\x23\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x69\x64\x78\x2C\x20\x74\x79\x70\x65\x46\x6E\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x79\x70\x65\x46\x6E\x28\x76\x61\x6C\x75\x65\x5B\x69\x64\x78\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x74\x79\x70\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x63\x72\x65\x61\x74\x65\x73\x20\x61\x20\x75\x6E\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x73\x20\x74\x6F\x20\x75\x6E\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x41\x6C\x69\x61\x73\x20\x66\x6F\x72\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x74\x2E\x73\x6F\x6D\x65\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x63\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x73\x20\x74\x6F\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x41\x6C\x69\x61\x73\x20\x66\x6F\x72\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x74\x2E\x65\x76\x65\x72\x79\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x61\x6E\x79\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x5B\x6B\x65\x79\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x20\x73\x74\x72\x69\x63\x74\x6C\x79\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x5B\x6B\x65\x79\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x5B\x6B\x65\x79\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x61\x6E\x64\x20\x69\x74\x27\x73\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x54\x68\x65\x20\x63\x6C\x61\x73\x73\x20\x6E\x61\x6D\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x0D\x0A\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x2E\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x7E\x3D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x61\x6E\x64\x20\x69\x74\x27\x73\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x62\x79\x20\x61\x6E\x20\x49\x73\x41\x20\x63\x6F\x6D\x70\x61\x72\x69\x73\x6F\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x54\x68\x65\x20\x63\x6C\x61\x73\x73\x20\x6E\x61\x6D\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x0D\x0A\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x3A\x49\x73\x41\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x65\x6E\x75\x6D\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x6E\x75\x6D\x20\x54\x68\x65\x20\x65\x6E\x75\x6D\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x65\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x45\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x2E\x45\x6E\x75\x6D\x54\x79\x70\x65\x20\x3D\x3D\x20\x65\x6E\x75\x6D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x57\x72\x61\x70\x20\x3D\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x77\x72\x61\x70\x73\x20\x61\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x20\x77\x69\x74\x68\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x61\x70\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x66\x69\x72\x73\x74\x20\x61\x73\x73\x65\x72\x74\x73\x20\x75\x73\x69\x6E\x67\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x20\x61\x6E\x64\x20\x74\x68\x65\x6E\x20\x63\x61\x6C\x6C\x73\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x57\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x73\x20\x61\x20\x67\x69\x76\x65\x6E\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x61\x70\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x73\x69\x6D\x70\x6C\x79\x20\x77\x72\x61\x70\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x43\x68\x69\x6C\x64\x72\x65\x6E\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x54\x61\x6B\x65\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x77\x68\x65\x72\x65\x20\x6B\x65\x79\x73\x20\x61\x72\x65\x20\x63\x68\x69\x6C\x64\x20\x6E\x61\x6D\x65\x73\x20\x61\x6E\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x20\x61\x67\x61\x69\x6E\x73\x74\x2E\x0D\x0A\x09\x09\x50\x61\x73\x73\x20\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x72\x65\x65\x20\x69\x6E\x74\x6F\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x09\x49\x66\x20\x61\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x63\x68\x69\x6C\x64\x20\x70\x61\x73\x73\x65\x73\x20\x65\x61\x63\x68\x20\x63\x68\x65\x63\x6B\x2C\x20\x74\x68\x65\x20\x6F\x76\x65\x72\x61\x6C\x6C\x20\x63\x68\x65\x63\x6B\x20\x70\x61\x73\x73\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x09\x57\x61\x72\x6E\x69\x6E\x67\x21\x20\x49\x66\x20\x79\x6F\x75\x20\x70\x61\x73\x73\x20\x69\x6E\x20\x61\x20\x74\x72\x65\x65\x20\x77\x69\x74\x68\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x6F\x6E\x65\x20\x63\x68\x69\x6C\x64\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x6E\x61\x6D\x65\x2C\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x61\x6C\x77\x61\x79\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x63\x68\x65\x63\x6B\x73\x20\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x72\x65\x65\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x43\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x69\x6C\x64\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x3A\x47\x65\x74\x43\x68\x69\x6C\x64\x72\x65\x6E\x28\x29\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x61\x6D\x65\x20\x3D\x20\x63\x68\x69\x6C\x64\x2E\x4E\x61\x6D\x65\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x3D\x20\x63\x68\x69\x6C\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6E\x61\x6D\x65\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x7B\x20\x74\x20\x3D\x20\x74\x20\x7D\x0D\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x90\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\x87\xA2\x49\x64\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x39\x65\x65\x38\x31\x34\x38\x33\x37\x61\x32\x37\x62\x31\x31\x38\x35\x37\x65\x38\x39\x35\x36\x33\x31\x33\x35\x63\x64\x33\x30\x36\xA4\x4E\x61\x6D\x65\xA1\x74\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x6B\xE3\x2D\x2D\x20\x74\x3A\x20\x61\x20\x72\x75\x6E\x74\x69\x6D\x65\x20\x74\x79\x70\x65\x63\x68\x65\x63\x6B\x65\x72\x20\x66\x6F\x72\x20\x52\x6F\x62\x6C\x6F\x78\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x65\x67\x75\x6C\x61\x72\x20\x6C\x75\x61\x20\x63\x6F\x6D\x70\x61\x74\x69\x62\x69\x6C\x69\x74\x79\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x6F\x66\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x20\x6F\x72\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x74\x79\x70\x65\x4E\x61\x6D\x65\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x74\x79\x70\x65\x4E\x61\x6D\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x74\x79\x70\x65\x4E\x61\x6D\x65\x2C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x7B\x7D\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x6D\x61\x74\x63\x68\x65\x73\x20\x61\x6E\x79\x20\x74\x79\x70\x65\x20\x65\x78\x63\x65\x70\x74\x20\x6E\x69\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x61\x6E\x79\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x61\x6E\x79\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x6E\x69\x6C\x22\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x62\x6F\x6F\x6C\x65\x61\x6E\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x62\x6F\x6F\x6C\x65\x61\x6E\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x74\x68\x72\x65\x61\x64\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x74\x68\x72\x65\x61\x64\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x74\x68\x72\x65\x61\x64\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x74\x5B\x22\x66\x75\x6E\x63\x74\x69\x6F\x6E\x22\x5D\x20\x3D\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x6E\x6F\x6E\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x6F\x6E\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x6E\x69\x6C\x22\x29\x0D\x0A\x74\x5B\x22\x6E\x69\x6C\x22\x5D\x20\x3D\x20\x74\x2E\x6E\x6F\x6E\x65\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x73\x74\x72\x69\x6E\x67\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x73\x74\x72\x69\x6E\x67\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x73\x74\x72\x69\x6E\x67\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x74\x61\x62\x6C\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x74\x61\x62\x6C\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x4C\x75\x61\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x20\x75\x73\x65\x72\x64\x61\x74\x61\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x75\x73\x65\x72\x64\x61\x74\x61\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x75\x73\x65\x72\x64\x61\x74\x61\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x61\x6E\x64\x20\x6E\x6F\x6E\x2D\x4E\x61\x4E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3D\x3D\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x75\x6E\x65\x78\x70\x65\x63\x74\x65\x64\x20\x4E\x61\x4E\x20\x76\x61\x6C\x75\x65\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x4E\x61\x4E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x61\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x20\x74\x79\x70\x65\x6F\x66\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x20\x3D\x3D\x20\x22\x6E\x75\x6D\x62\x65\x72\x22\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x75\x6E\x65\x78\x70\x65\x63\x74\x65\x64\x20\x6E\x6F\x6E\x2D\x4E\x61\x4E\x20\x76\x61\x6C\x75\x65\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x6F\x62\x6C\x6F\x78\x20\x74\x79\x70\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x41\x78\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x41\x78\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x41\x78\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x42\x72\x69\x63\x6B\x43\x6F\x6C\x6F\x72\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x46\x72\x61\x6D\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x46\x72\x61\x6D\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x46\x72\x61\x6D\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x43\x6F\x6C\x6F\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x44\x6F\x63\x6B\x57\x69\x64\x67\x65\x74\x50\x6C\x75\x67\x69\x6E\x47\x75\x69\x49\x6E\x66\x6F\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x46\x61\x63\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x46\x61\x63\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x46\x61\x63\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x49\x6E\x73\x74\x61\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x52\x61\x6E\x67\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x4E\x75\x6D\x62\x65\x72\x53\x65\x71\x75\x65\x6E\x63\x65\x4B\x65\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x50\x61\x74\x68\x57\x61\x79\x70\x6F\x69\x6E\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x50\x68\x79\x73\x69\x63\x61\x6C\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x61\x6E\x64\x6F\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x61\x6E\x64\x6F\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x61\x6E\x64\x6F\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x61\x79\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x61\x79\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x61\x79\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x63\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x63\x74\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x63\x74\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x67\x69\x6F\x6E\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x67\x69\x6F\x6E\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x67\x69\x6F\x6E\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x65\x67\x69\x6F\x6E\x33\x69\x6E\x74\x31\x36\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x54\x77\x65\x65\x6E\x49\x6E\x66\x6F\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x55\x44\x69\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x55\x44\x69\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x55\x44\x69\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x55\x44\x69\x6D\x32\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x55\x44\x69\x6D\x32\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x55\x44\x69\x6D\x32\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x32\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x32\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x32\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x33\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x33\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x33\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x56\x65\x63\x74\x6F\x72\x33\x69\x6E\x74\x31\x36\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x20\x72\x6F\x62\x6C\x6F\x78\x20\x65\x6E\x75\x6D\x20\x74\x79\x70\x65\x73\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x45\x6E\x75\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x45\x6E\x75\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x45\x6E\x75\x6D\x49\x74\x65\x6D\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x45\x6E\x75\x6D\x49\x74\x65\x6D\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x42\x58\x53\x63\x72\x69\x70\x74\x53\x69\x67\x6E\x61\x6C\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x52\x6F\x62\x6C\x6F\x78\x20\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x3D\x20\x70\x72\x69\x6D\x69\x74\x69\x76\x65\x28\x22\x52\x42\x58\x53\x63\x72\x69\x70\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x22\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x67\x69\x76\x65\x6E\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x54\x68\x65\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x69\x7A\x65\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x22\x23\x22\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x69\x66\x20\x73\x69\x7A\x65\x20\x3D\x3D\x20\x31\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x3D\x20\x2E\x2E\x2E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x7E\x3D\x20\x6C\x69\x74\x65\x72\x61\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x65\x78\x70\x65\x63\x74\x65\x64\x20\x25\x73\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6C\x69\x74\x65\x72\x61\x6C\x29\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x76\x61\x6C\x75\x65\x29\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x69\x74\x65\x72\x61\x6C\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x20\x3D\x20\x31\x2C\x20\x73\x69\x7A\x65\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x20\x3D\x20\x73\x65\x6C\x65\x63\x74\x28\x69\x2C\x20\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x6C\x69\x74\x65\x72\x61\x6C\x73\x5B\x69\x5D\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x6C\x69\x74\x65\x72\x61\x6C\x73\x2C\x20\x31\x2C\x20\x73\x69\x7A\x65\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x44\x45\x50\x52\x45\x43\x41\x54\x45\x44\x0D\x0A\x09\x50\x6C\x65\x61\x73\x65\x20\x75\x73\x65\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x65\x78\x61\x63\x74\x6C\x79\x20\x3D\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x6B\x65\x79\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x61\x73\x20\x61\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6B\x65\x79\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x67\x65\x74\x20\x6B\x65\x79\x73\x20\x66\x72\x6F\x6D\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6B\x65\x79\x4F\x66\x28\x6B\x65\x79\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x30\x0D\x0A\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x6B\x65\x79\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x6C\x65\x6E\x67\x74\x68\x20\x2B\x20\x31\x0D\x0A\x09\x09\x6B\x65\x79\x73\x5B\x6C\x65\x6E\x67\x74\x68\x5D\x20\x3D\x20\x6B\x65\x79\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x6B\x65\x79\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x52\x65\x74\x75\x72\x6E\x73\x20\x61\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x20\x6F\x66\x20\x65\x61\x63\x68\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x61\x73\x20\x61\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x67\x65\x74\x20\x76\x61\x6C\x75\x65\x73\x20\x66\x72\x6F\x6D\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x76\x61\x6C\x75\x65\x4F\x66\x28\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x30\x0D\x0A\x09\x66\x6F\x72\x20\x5F\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x6C\x65\x6E\x67\x74\x68\x20\x3D\x20\x6C\x65\x6E\x67\x74\x68\x20\x2B\x20\x31\x0D\x0A\x09\x09\x76\x61\x6C\x75\x65\x73\x5B\x6C\x65\x6E\x67\x74\x68\x5D\x20\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x61\x62\x6C\x65\x2E\x75\x6E\x70\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x73\x2C\x20\x31\x2C\x20\x6C\x65\x6E\x67\x74\x68\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x69\x6E\x74\x65\x67\x65\x72\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x20\x54\x68\x65\x20\x76\x61\x6C\x75\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x54\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x61\x74\x69\x73\x66\x69\x65\x64\x2C\x20\x66\x61\x6C\x73\x65\x20\x6F\x74\x68\x65\x72\x77\x69\x73\x65\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x25\x20\x31\x20\x3D\x3D\x20\x30\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x69\x6E\x74\x65\x67\x65\x72\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x3D\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3E\x3D\x20\x6D\x69\x6E\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x3E\x3D\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x6D\x69\x6E\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x6D\x61\x78\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x3C\x3D\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x6D\x61\x78\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x3E\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x6D\x69\x6E\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x61\x78\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x6E\x75\x6D\x62\x65\x72\x20\x3C\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x6D\x61\x78\x2C\x20\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3E\x20\x30\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x75\x6D\x62\x65\x72\x50\x6F\x73\x69\x74\x69\x76\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x30\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x30\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4E\x65\x67\x61\x74\x69\x76\x65\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x30\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x3D\x20\x76\x61\x6C\x75\x65\x20\x3C\x3D\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x28\x6D\x69\x6E\x2C\x20\x6D\x61\x78\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x69\x6E\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x61\x78\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x28\x6D\x61\x78\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6D\x69\x6E\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6D\x69\x6E\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6D\x61\x78\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6D\x61\x78\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x6E\x75\x6D\x62\x65\x72\x20\x77\x68\x65\x72\x65\x20\x6D\x69\x6E\x20\x3C\x20\x76\x61\x6C\x75\x65\x20\x3C\x20\x6D\x61\x78\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x69\x6E\x20\x54\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6D\x61\x78\x20\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x2C\x20\x6D\x61\x78\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x69\x6E\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x6E\x75\x6D\x62\x65\x72\x28\x6D\x61\x78\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x69\x6E\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x69\x6E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6E\x75\x6D\x62\x65\x72\x4D\x61\x78\x45\x78\x63\x6C\x75\x73\x69\x76\x65\x28\x6D\x61\x78\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6D\x69\x6E\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x6D\x69\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x69\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6D\x69\x6E\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6D\x61\x78\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x6D\x61\x78\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6D\x61\x78\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6D\x61\x78\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x73\x74\x72\x69\x6E\x67\x20\x70\x61\x74\x74\x65\x72\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x73\x74\x72\x69\x6E\x67\x20\x70\x61\x74\x74\x65\x72\x6E\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6D\x61\x74\x63\x68\x28\x70\x61\x74\x74\x65\x72\x6E\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x70\x61\x74\x74\x65\x72\x6E\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x74\x72\x69\x6E\x67\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x73\x74\x72\x69\x6E\x67\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x74\x72\x69\x6E\x67\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x45\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x73\x74\x72\x69\x6E\x67\x2E\x6D\x61\x74\x63\x68\x28\x76\x61\x6C\x75\x65\x2C\x20\x70\x61\x74\x74\x65\x72\x6E\x29\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x71\x20\x66\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6D\x61\x74\x63\x68\x20\x70\x61\x74\x74\x65\x72\x6E\x20\x25\x71\x22\x2C\x20\x76\x61\x6C\x75\x65\x2C\x20\x70\x61\x74\x74\x65\x72\x6E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x65\x69\x74\x68\x65\x72\x20\x6E\x69\x6C\x20\x6F\x72\x20\x70\x61\x73\x73\x65\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x75\x73\x65\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x20\x3D\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x28\x6F\x70\x74\x69\x6F\x6E\x61\x6C\x29\x20\x25\x73\x22\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x74\x75\x70\x6C\x65\x20\x61\x67\x61\x69\x6E\x73\x74\x20\x74\x75\x70\x6C\x65\x20\x74\x79\x70\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x74\x79\x70\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x74\x75\x70\x6C\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x67\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x66\x6F\x72\x20\x69\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x61\x72\x67\x73\x5B\x69\x5D\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x42\x61\x64\x20\x74\x75\x70\x6C\x65\x20\x69\x6E\x64\x65\x78\x20\x23\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x69\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x69\x6E\x20\x67\x69\x76\x65\x6E\x20\x74\x61\x62\x6C\x65\x20\x70\x61\x73\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x6B\x65\x79\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6B\x65\x79\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x6B\x65\x79\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x62\x61\x64\x20\x6B\x65\x79\x20\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x69\x6E\x20\x67\x69\x76\x65\x6E\x20\x74\x61\x62\x6C\x65\x20\x70\x61\x73\x73\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x76\x61\x6C\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x62\x61\x64\x20\x76\x61\x6C\x75\x65\x20\x66\x6F\x72\x20\x6B\x65\x79\x20\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x70\x61\x73\x73\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x6B\x65\x79\x73\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x6D\x61\x70\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x2C\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x65\x72\x20\x3D\x20\x74\x2E\x6B\x65\x79\x73\x28\x6B\x65\x79\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x65\x72\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6B\x65\x79\x45\x72\x72\x20\x3D\x20\x6B\x65\x79\x43\x68\x65\x63\x6B\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x6B\x65\x79\x45\x72\x72\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x45\x72\x72\x20\x3D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x65\x72\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x76\x61\x6C\x75\x65\x45\x72\x72\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x6B\x65\x79\x73\x20\x70\x61\x73\x73\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x74\x72\x75\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x76\x61\x6C\x75\x65\x73\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x65\x74\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x2E\x6D\x61\x70\x28\x76\x61\x6C\x75\x65\x43\x68\x65\x63\x6B\x2C\x20\x74\x2E\x6C\x69\x74\x65\x72\x61\x6C\x28\x74\x72\x75\x65\x29\x29\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x6B\x65\x79\x73\x28\x74\x2E\x69\x6E\x74\x65\x67\x65\x72\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x61\x6E\x64\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x6F\x66\x20\x74\x68\x65\x20\x61\x72\x72\x61\x79\x20\x6D\x61\x74\x63\x68\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x63\x6F\x6D\x70\x61\x72\x65\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x74\x68\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x63\x68\x65\x63\x6B\x29\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x73\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x76\x61\x6C\x75\x65\x73\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6B\x65\x79\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x61\x72\x72\x61\x79\x5D\x20\x25\x73\x22\x2C\x20\x6B\x65\x79\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x23\x20\x69\x73\x20\x75\x6E\x72\x65\x6C\x69\x61\x62\x6C\x65\x20\x66\x6F\x72\x20\x73\x70\x61\x72\x73\x65\x20\x61\x72\x72\x61\x79\x73\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x43\x6F\x75\x6E\x74\x20\x75\x70\x77\x61\x72\x64\x73\x20\x75\x73\x69\x6E\x67\x20\x69\x70\x61\x69\x72\x73\x20\x74\x6F\x20\x61\x76\x6F\x69\x64\x20\x66\x61\x6C\x73\x65\x20\x70\x6F\x73\x69\x74\x69\x76\x65\x73\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x62\x65\x68\x61\x76\x69\x6F\x72\x20\x6F\x66\x20\x23\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x3D\x20\x30\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x3D\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x2B\x20\x31\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x20\x3C\x20\x31\x20\x6F\x72\x20\x6B\x65\x79\x20\x3E\x20\x61\x72\x72\x61\x79\x53\x69\x7A\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x61\x72\x72\x61\x79\x5D\x20\x6B\x65\x79\x20\x25\x73\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x73\x65\x71\x75\x65\x6E\x74\x69\x61\x6C\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x76\x61\x6C\x75\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x76\x61\x6C\x75\x65\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x61\x72\x72\x61\x79\x5D\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x61\x72\x72\x61\x79\x20\x6F\x66\x20\x61\x20\x73\x74\x72\x69\x63\x74\x20\x6D\x61\x6B\x65\x75\x70\x20\x61\x6E\x64\x20\x73\x69\x7A\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x20\x74\x6F\x20\x63\x6F\x6D\x70\x61\x72\x65\x20\x61\x6C\x6C\x20\x76\x61\x6C\x75\x65\x73\x20\x77\x69\x74\x68\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x28\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x6B\x65\x79\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x61\x72\x72\x61\x79\x4B\x65\x79\x73\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6B\x65\x79\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x5D\x20\x25\x73\x22\x2C\x20\x6B\x65\x79\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x2D\x2D\x20\x49\x66\x20\x74\x68\x65\x72\x65\x27\x73\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x74\x68\x65\x20\x73\x65\x74\x20\x61\x72\x72\x61\x79\x20\x73\x69\x7A\x65\x2C\x20\x64\x69\x73\x61\x6C\x6C\x6F\x77\x0D\x0A\x09\x09\x09\x69\x66\x20\x23\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x20\x3C\x20\x23\x76\x61\x6C\x75\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x5D\x20\x41\x72\x72\x61\x79\x20\x73\x69\x7A\x65\x20\x65\x78\x63\x65\x65\x64\x73\x20\x6C\x69\x6D\x69\x74\x20\x6F\x66\x20\x25\x64\x22\x2C\x20\x23\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x69\x64\x78\x2C\x20\x74\x79\x70\x65\x46\x6E\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x54\x79\x70\x65\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x79\x70\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x79\x70\x65\x46\x6E\x28\x76\x61\x6C\x75\x65\x5B\x69\x64\x78\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x74\x79\x70\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x73\x74\x72\x69\x63\x74\x41\x72\x72\x61\x79\x5D\x20\x41\x72\x72\x61\x79\x20\x69\x6E\x64\x65\x78\x20\x23\x25\x64\x20\x2D\x20\x25\x73\x22\x2C\x20\x69\x64\x78\x2C\x20\x74\x79\x70\x65\x45\x72\x72\x4D\x73\x67\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x20\x3D\x20\x74\x2E\x61\x72\x72\x61\x79\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x63\x72\x65\x61\x74\x65\x73\x20\x61\x20\x75\x6E\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x73\x20\x74\x6F\x20\x75\x6E\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x22\x62\x61\x64\x20\x74\x79\x70\x65\x20\x66\x6F\x72\x20\x75\x6E\x69\x6F\x6E\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x41\x6C\x69\x61\x73\x20\x66\x6F\x72\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x74\x2E\x73\x6F\x6D\x65\x20\x3D\x20\x74\x2E\x75\x6E\x69\x6F\x6E\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x63\x72\x65\x61\x74\x65\x73\x20\x61\x6E\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x2E\x2E\x2E\x20\x54\x68\x65\x20\x63\x68\x65\x63\x6B\x73\x20\x74\x6F\x20\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x73\x20\x3D\x20\x7B\x20\x2E\x2E\x2E\x20\x7D\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x41\x72\x72\x61\x79\x28\x63\x68\x65\x63\x6B\x73\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x73\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x41\x6C\x69\x61\x73\x20\x66\x6F\x72\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x74\x2E\x65\x76\x65\x72\x79\x20\x3D\x20\x74\x2E\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x61\x6E\x79\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x5B\x6B\x65\x79\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x5D\x20\x62\x61\x64\x20\x76\x61\x6C\x75\x65\x20\x66\x6F\x72\x20\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x67\x69\x76\x65\x6E\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x20\x73\x74\x72\x69\x63\x74\x6C\x79\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x64\x65\x66\x69\x6E\x69\x74\x69\x6F\x6E\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x74\x61\x62\x6C\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x74\x61\x62\x6C\x65\x53\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x74\x61\x62\x6C\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x5B\x6B\x65\x79\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x73\x75\x63\x63\x65\x73\x73\x20\x3D\x3D\x20\x66\x61\x6C\x73\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x5D\x20\x62\x61\x64\x20\x76\x61\x6C\x75\x65\x20\x66\x6F\x72\x20\x25\x73\x3A\x5C\x6E\x5C\x74\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6B\x65\x79\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x5B\x6B\x65\x79\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x5D\x20\x75\x6E\x65\x78\x70\x65\x63\x74\x65\x64\x20\x66\x69\x65\x6C\x64\x20\x25\x71\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x6B\x65\x79\x29\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x61\x6E\x64\x20\x69\x74\x27\x73\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x54\x68\x65\x20\x63\x6C\x61\x73\x73\x20\x6E\x61\x6D\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x0D\x0A\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x2E\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x7E\x3D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x76\x61\x6C\x75\x65\x2E\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x45\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x3D\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x4F\x66\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x20\x61\x6E\x64\x20\x69\x74\x27\x73\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x6D\x61\x74\x63\x68\x65\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x62\x79\x20\x61\x6E\x20\x49\x73\x41\x20\x63\x6F\x6D\x70\x61\x72\x69\x73\x6F\x6E\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x20\x54\x68\x65\x20\x63\x6C\x61\x73\x73\x20\x6E\x61\x6D\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x66\x6F\x72\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x69\x6E\x73\x74\x61\x6E\x63\x65\x49\x73\x41\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x0D\x0A\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x20\x7E\x3D\x20\x6E\x69\x6C\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x3D\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x69\x6C\x64\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x76\x61\x6C\x75\x65\x3A\x49\x73\x41\x28\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x25\x73\x22\x2C\x20\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65\x2C\x20\x76\x61\x6C\x75\x65\x2E\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x43\x68\x65\x63\x6B\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x45\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x65\x6E\x73\x75\x72\x65\x73\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20\x61\x6E\x20\x65\x6E\x75\x6D\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x20\x74\x79\x70\x65\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x65\x6E\x75\x6D\x20\x54\x68\x65\x20\x65\x6E\x75\x6D\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x77\x69\x6C\x6C\x20\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x20\x69\x66\x66\x20\x74\x68\x65\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x20\x69\x73\x20\x70\x61\x73\x73\x65\x64\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x65\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x29\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x28\x74\x2E\x45\x6E\x75\x6D\x28\x65\x6E\x75\x6D\x29\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x6C\x6F\x63\x61\x6C\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x45\x6E\x75\x6D\x49\x74\x65\x6D\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x65\x6E\x75\x6D\x49\x74\x65\x6D\x45\x72\x72\x4D\x73\x67\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x69\x66\x20\x76\x61\x6C\x75\x65\x2E\x45\x6E\x75\x6D\x54\x79\x70\x65\x20\x3D\x3D\x20\x65\x6E\x75\x6D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6C\x73\x65\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x65\x6E\x75\x6D\x20\x6F\x66\x20\x25\x73\x20\x65\x78\x70\x65\x63\x74\x65\x64\x2C\x20\x67\x6F\x74\x20\x65\x6E\x75\x6D\x20\x6F\x66\x20\x25\x73\x22\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x65\x6E\x75\x6D\x29\x2C\x20\x74\x6F\x73\x74\x72\x69\x6E\x67\x28\x76\x61\x6C\x75\x65\x2E\x45\x6E\x75\x6D\x54\x79\x70\x65\x29\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x57\x72\x61\x70\x20\x3D\x20\x74\x2E\x74\x75\x70\x6C\x65\x28\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x77\x72\x61\x70\x73\x20\x61\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x69\x6E\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x20\x77\x69\x74\x68\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x61\x70\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x75\x73\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x73\x20\x69\x6E\x20\x74\x68\x65\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x66\x69\x72\x73\x74\x20\x61\x73\x73\x65\x72\x74\x73\x20\x75\x73\x69\x6E\x67\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x20\x61\x6E\x64\x20\x74\x68\x65\x6E\x20\x63\x61\x6C\x6C\x73\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x77\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x57\x72\x61\x70\x28\x63\x61\x6C\x6C\x62\x61\x63\x6B\x2C\x20\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x29\x29\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x41\x72\x67\x73\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x63\x61\x6C\x6C\x62\x61\x63\x6B\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x61\x73\x73\x65\x72\x74\x73\x20\x61\x20\x67\x69\x76\x65\x6E\x20\x63\x68\x65\x63\x6B\x0D\x0A\x0D\x0A\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x20\x54\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x61\x70\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x0D\x0A\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x73\x69\x6D\x70\x6C\x79\x20\x77\x72\x61\x70\x73\x20\x74\x68\x65\x20\x67\x69\x76\x65\x6E\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x61\x6E\x20\x61\x73\x73\x65\x72\x74\x0D\x0A\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x73\x74\x72\x69\x63\x74\x28\x63\x68\x65\x63\x6B\x29\x0D\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x2E\x2E\x2E\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x28\x2E\x2E\x2E\x29\x29\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x64\x6F\x0D\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x65\x63\x6B\x43\x68\x69\x6C\x64\x72\x65\x6E\x20\x3D\x20\x74\x2E\x6D\x61\x70\x28\x74\x2E\x73\x74\x72\x69\x6E\x67\x2C\x20\x74\x2E\x63\x61\x6C\x6C\x62\x61\x63\x6B\x29\x0D\x0A\x0D\x0A\x2D\x2D\x5B\x5B\x2A\x2A\x0D\x0A\x09\x09\x54\x61\x6B\x65\x73\x20\x61\x20\x74\x61\x62\x6C\x65\x20\x77\x68\x65\x72\x65\x20\x6B\x65\x79\x73\x20\x61\x72\x65\x20\x63\x68\x69\x6C\x64\x20\x6E\x61\x6D\x65\x73\x20\x61\x6E\x64\x20\x76\x61\x6C\x75\x65\x73\x20\x61\x72\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x73\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x74\x68\x65\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x20\x61\x67\x61\x69\x6E\x73\x74\x2E\x0D\x0A\x09\x09\x50\x61\x73\x73\x20\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x72\x65\x65\x20\x69\x6E\x74\x6F\x20\x74\x68\x65\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x2E\x0D\x0A\x09\x09\x49\x66\x20\x61\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x63\x68\x69\x6C\x64\x20\x70\x61\x73\x73\x65\x73\x20\x65\x61\x63\x68\x20\x63\x68\x65\x63\x6B\x2C\x20\x74\x68\x65\x20\x6F\x76\x65\x72\x61\x6C\x6C\x20\x63\x68\x65\x63\x6B\x20\x70\x61\x73\x73\x65\x73\x2E\x0D\x0A\x0D\x0A\x09\x09\x57\x61\x72\x6E\x69\x6E\x67\x21\x20\x49\x66\x20\x79\x6F\x75\x20\x70\x61\x73\x73\x20\x69\x6E\x20\x61\x20\x74\x72\x65\x65\x20\x77\x69\x74\x68\x20\x6D\x6F\x72\x65\x20\x74\x68\x61\x6E\x20\x6F\x6E\x65\x20\x63\x68\x69\x6C\x64\x20\x6F\x66\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x6E\x61\x6D\x65\x2C\x20\x74\x68\x69\x73\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x77\x69\x6C\x6C\x20\x61\x6C\x77\x61\x79\x73\x20\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x0D\x0A\x0D\x0A\x09\x09\x40\x70\x61\x72\x61\x6D\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x20\x54\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x74\x6F\x20\x63\x68\x65\x63\x6B\x20\x61\x67\x61\x69\x6E\x73\x74\x0D\x0A\x0D\x0A\x09\x09\x40\x72\x65\x74\x75\x72\x6E\x73\x20\x41\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x63\x68\x65\x63\x6B\x73\x20\x61\x6E\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x20\x74\x72\x65\x65\x0D\x0A\x09\x2A\x2A\x2D\x2D\x5D\x5D\x0D\x0A\x09\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x74\x2E\x63\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x0D\x0A\x09\x09\x61\x73\x73\x65\x72\x74\x28\x63\x68\x65\x63\x6B\x43\x68\x69\x6C\x64\x72\x65\x6E\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x29\x0D\x0A\x0D\x0A\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x75\x6E\x63\x74\x69\x6F\x6E\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x3D\x20\x74\x2E\x49\x6E\x73\x74\x61\x6E\x63\x65\x28\x76\x61\x6C\x75\x65\x29\x0D\x0A\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x53\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x69\x6E\x73\x74\x61\x6E\x63\x65\x45\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x20\x3D\x20\x7B\x7D\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x5F\x2C\x20\x63\x68\x69\x6C\x64\x20\x69\x6E\x20\x69\x70\x61\x69\x72\x73\x28\x76\x61\x6C\x75\x65\x3A\x47\x65\x74\x43\x68\x69\x6C\x64\x72\x65\x6E\x28\x29\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x6E\x61\x6D\x65\x20\x3D\x20\x63\x68\x69\x6C\x64\x2E\x4E\x61\x6D\x65\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x69\x66\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x43\x61\x6E\x6E\x6F\x74\x20\x70\x72\x6F\x63\x65\x73\x73\x20\x6D\x75\x6C\x74\x69\x70\x6C\x65\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x20\x77\x69\x74\x68\x20\x74\x68\x65\x20\x73\x61\x6D\x65\x20\x6E\x61\x6D\x65\x20\x25\x71\x22\x2C\x20\x6E\x61\x6D\x65\x29\x0D\x0A\x09\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x09\x09\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x20\x3D\x20\x63\x68\x69\x6C\x64\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x66\x6F\x72\x20\x6E\x61\x6D\x65\x2C\x20\x63\x68\x65\x63\x6B\x20\x69\x6E\x20\x70\x61\x69\x72\x73\x28\x63\x68\x65\x63\x6B\x54\x61\x62\x6C\x65\x29\x20\x64\x6F\x0D\x0A\x09\x09\x09\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x63\x63\x65\x73\x73\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x3D\x20\x63\x68\x65\x63\x6B\x28\x63\x68\x69\x6C\x64\x72\x65\x6E\x42\x79\x4E\x61\x6D\x65\x5B\x6E\x61\x6D\x65\x5D\x29\x0D\x0A\x09\x09\x09\x09\x69\x66\x20\x6E\x6F\x74\x20\x73\x75\x63\x63\x65\x73\x73\x20\x74\x68\x65\x6E\x0D\x0A\x09\x09\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x2C\x20\x73\x74\x72\x69\x6E\x67\x2E\x66\x6F\x72\x6D\x61\x74\x28\x22\x5B\x25\x73\x2E\x25\x73\x5D\x20\x25\x73\x22\x2C\x20\x76\x61\x6C\x75\x65\x3A\x47\x65\x74\x46\x75\x6C\x6C\x4E\x61\x6D\x65\x28\x29\x2C\x20\x6E\x61\x6D\x65\x2C\x20\x65\x72\x72\x4D\x73\x67\x20\x6F\x72\x20\x22\x22\x29\x0D\x0A\x09\x09\x09\x09\x65\x6E\x64\x0D\x0A\x09\x09\x09\x65\x6E\x64\x0D\x0A\x0D\x0A\x09\x09\x09\x72\x65\x74\x75\x72\x6E\x20\x74\x72\x75\x65\x0D\x0A\x09\x09\x65\x6E\x64\x0D\x0A\x09\x65\x6E\x64\x0D\x0A\x65\x6E\x64\x0D\x0A\x0D\x0A\x72\x65\x74\x75\x72\x6E\x20\x74\x0D\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x92\xD9\x20\x64\x32\x32\x61\x64\x63\x33\x61\x39\x62\x64\x37\x31\x39\x35\x64\x61\x65\x34\x65\x33\x63\x34\x65\x61\x32\x36\x31\x32\x63\x30\x39\xD9\x20\x39\x39\x65\x61\x35\x37\x36\x35\x30\x30\x38\x31\x34\x31\x37\x66\x64\x32\x35\x36\x62\x37\x30\x39\x32\x63\x63\x64\x62\x61\x31\x39\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x39\x65\x65\x38\x31\x34\x38\x33\x37\x61\x32\x37\x62\x31\x31\x38\x35\x37\x65\x38\x39\x35\x36\x33\x31\x33\x35\x63\x64\x33\x30\x36\x87\xA2\x49\x64\xD9\x20\x39\x65\x65\x38\x31\x34\x38\x33\x37\x61\x32\x37\x62\x31\x31\x38\x35\x37\x65\x38\x39\x35\x36\x33\x31\x33\x35\x63\x64\x33\x30\x36\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x32\x65\x32\x64\x34\x32\x36\x38\x61\x64\x39\x31\x64\x34\x30\x64\x34\x38\x39\x38\x34\x34\x64\x31\x34\x39\x62\x37\x63\x38\x37\x65\xA4\x4E\x61\x6D\x65\xB1\x73\x68\x61\x6E\x65\x62\x75\x74\x74\x5F\x74\x40\x31\x2E\x33\x2E\x31\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xA6\x46\x6F\x6C\x64\x65\x72\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x80\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x91\xD9\x20\x63\x33\x39\x65\x32\x36\x37\x37\x36\x64\x65\x30\x38\x32\x65\x36\x32\x32\x32\x66\x63\x38\x33\x39\x66\x61\x38\x62\x31\x62\x34\x38\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\x87\xA2\x49\x64\xD9\x20\x65\x34\x31\x32\x64\x35\x37\x65\x61\x63\x65\x38\x39\x31\x31\x62\x38\x36\x66\x61\x62\x65\x66\x36\x65\x38\x35\x32\x31\x64\x37\x37\xA6\x50\x61\x72\x65\x6E\x74\xD9\x20\x65\x65\x32\x32\x32\x66\x33\x38\x66\x61\x38\x62\x65\x37\x38\x63\x34\x37\x66\x31\x38\x66\x64\x38\x37\x35\x61\x63\x37\x38\x35\x34\xA4\x4E\x61\x6D\x65\xA6\x50\x6F\x72\x74\x61\x6C\xA9\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65\xAC\x4D\x6F\x64\x75\x6C\x65\x53\x63\x72\x69\x70\x74\xAA\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x81\xA6\x53\x6F\x75\x72\x63\x65\x81\xA6\x53\x74\x72\x69\x6E\x67\xDA\x05\xF0\x6C\x6F\x63\x61\x6C\x20\x48\x74\x74\x70\x53\x65\x72\x76\x69\x63\x65\x3A\x20\x48\x74\x74\x70\x53\x65\x72\x76\x69\x63\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x48\x74\x74\x70\x53\x65\x72\x76\x69\x63\x65\x22\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x22\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x20\x3D\x20\x67\x61\x6D\x65\x3A\x47\x65\x74\x53\x65\x72\x76\x69\x63\x65\x28\x22\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x22\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x50\x61\x72\x65\x6E\x74\x2E\x74\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x74\x79\x70\x65\x73\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x54\x79\x70\x65\x73\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x52\x65\x6D\x6F\x74\x65\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x20\x3D\x20\x22\x50\x6F\x72\x74\x61\x6C\x22\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x74\x6F\x72\x61\x67\x65\x3A\x20\x46\x6F\x6C\x64\x65\x72\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x46\x69\x6E\x64\x46\x69\x72\x73\x74\x43\x68\x69\x6C\x64\x28\x52\x65\x6D\x6F\x74\x65\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x29\x20\x3A\x3A\x20\x46\x6F\x6C\x64\x65\x72\x0A\x0A\x69\x66\x20\x6E\x6F\x74\x20\x53\x74\x6F\x72\x61\x67\x65\x20\x74\x68\x65\x6E\x0A\x09\x69\x66\x20\x52\x75\x6E\x53\x65\x72\x76\x69\x63\x65\x3A\x49\x73\x53\x65\x72\x76\x65\x72\x28\x29\x20\x74\x68\x65\x6E\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x49\x6E\x73\x74\x61\x6E\x63\x65\x2E\x6E\x65\x77\x28\x22\x46\x6F\x6C\x64\x65\x72\x22\x29\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x2E\x4E\x61\x6D\x65\x20\x3D\x20\x52\x65\x6D\x6F\x74\x65\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x2E\x50\x61\x72\x65\x6E\x74\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x0A\x09\x65\x6C\x73\x65\x0A\x09\x09\x53\x74\x6F\x72\x61\x67\x65\x20\x3D\x20\x52\x65\x70\x6C\x69\x63\x61\x74\x65\x64\x53\x74\x6F\x72\x61\x67\x65\x3A\x57\x61\x69\x74\x46\x6F\x72\x43\x68\x69\x6C\x64\x28\x52\x65\x6D\x6F\x74\x65\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x29\x0A\x09\x65\x6E\x64\x0A\x65\x6E\x64\x0A\x0A\x74\x79\x70\x65\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x74\x79\x70\x65\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0A\x74\x79\x70\x65\x20\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x74\x79\x70\x65\x73\x2E\x49\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x43\x6F\x6E\x74\x65\x78\x74\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x43\x6F\x6E\x74\x65\x78\x74\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0A\x6C\x6F\x63\x61\x6C\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x72\x65\x71\x75\x69\x72\x65\x28\x73\x63\x72\x69\x70\x74\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x29\x0A\x0A\x6C\x6F\x63\x61\x6C\x20\x50\x6F\x72\x74\x61\x6C\x20\x3D\x20\x7B\x7D\x0A\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x20\x3D\x20\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x6E\x65\x77\x28\x29\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x6F\x72\x74\x61\x6C\x3A\x43\x6F\x6E\x74\x65\x78\x74\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x29\x3A\x20\x49\x43\x6F\x6E\x74\x65\x78\x74\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x61\x64\x64\x43\x6F\x6E\x74\x65\x78\x74\x28\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x29\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x6F\x72\x74\x61\x6C\x3A\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x62\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x3F\x29\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x6D\x61\x6B\x65\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x2C\x20\x63\x62\x29\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x6F\x72\x74\x61\x6C\x3A\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x63\x62\x3A\x20\x28\x29\x20\x2D\x3E\x20\x28\x29\x29\x0A\x09\x6C\x6F\x63\x61\x6C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20\x49\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x3D\x20\x50\x6F\x72\x74\x61\x6C\x3A\x53\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x28\x63\x6F\x6E\x74\x65\x78\x74\x2C\x20\x61\x63\x74\x69\x6F\x6E\x2C\x20\x63\x62\x29\x0A\x09\x72\x65\x74\x75\x72\x6E\x20\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2E\x64\x6F\x53\x75\x62\x73\x63\x72\x69\x62\x65\x28\x50\x6F\x72\x74\x61\x6C\x2E\x57\x6F\x72\x6D\x68\x6F\x6C\x65\x2C\x20\x73\x75\x62\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x29\x0A\x65\x6E\x64\x0A\x0A\x66\x75\x6E\x63\x74\x69\x6F\x6E\x20\x50\x6F\x72\x74\x61\x6C\x3A\x50\x75\x62\x6C\x69\x73\x68\x28\x63\x6F\x6E\x74\x65\x78\x74\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x61\x63\x74\x69\x6F\x6E\x3A\x20\x73\x74\x72\x69\x6E\x67\x2C\x20\x64\x61\x74\x61\x3A\x20\x61\x6E\x79\x29\x20\x65\x6E\x64\x0A\x0A\x72\x65\x74\x75\x72\x6E\x20\x50\x6F\x72\x74\x61\x6C\x0A\xA8\x43\x68\x69\x6C\x64\x72\x65\x6E\x95\xD9\x20\x32\x64\x35\x36\x39\x36\x65\x65\x35\x62\x64\x66\x34\x63\x38\x61\x30\x61\x35\x34\x32\x62\x66\x35\x38\x66\x36\x33\x62\x37\x33\x38\xD9\x20\x61\x61\x35\x37\x37\x32\x61\x65\x33\x61\x39\x31\x63\x62\x38\x62\x39\x33\x62\x37\x32\x34\x64\x37\x63\x35\x61\x31\x35\x31\x39\x30\xD9\x20\x62\x30\x30\x36\x36\x36\x36\x64\x65\x37\x61\x30\x33\x34\x36\x39\x39\x32\x39\x30\x63\x38\x66\x37\x61\x34\x32\x34\x34\x36\x62\x66\xD9\x20\x64\x35\x33\x39\x64\x32\x62\x33\x35\x34\x37\x63\x39\x31\x36\x36\x64\x61\x65\x35\x66\x66\x64\x33\x36\x37\x61\x33\x37\x63\x62\x33\xD9\x20\x38\x39\x37\x33\x34\x66\x31\x64\x66\x39\x39\x37\x64\x65\x38\x35\x66\x64\x32\x62\x64\x64\x34\x32\x37\x64\x64\x66\x33\x34\x66\x62\xA8\x4D\x65\x74\x61\x64\x61\x74\x61\x81\xB6\x69\x67\x6E\x6F\x72\x65\x55\x6E\x6B\x6E\x6F\x77\x6E\x49\x6E\x73\x74\x61\x6E\x63\x65\x73\xC2' diff --git a/plugin/Packages/msgpack-luau/benchmark/decode-encode.bench.lua b/plugin/Packages/msgpack-luau/benchmark/decode-encode.bench.lua new file mode 100644 index 00000000..43d7c899 --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/decode-encode.bench.lua @@ -0,0 +1,34 @@ +local msgpack = require(game.ReplicatedStorage.msgpack) + +local httpService = game:GetService("HttpService") +local msgpackDecode = msgpack.decode +local msgpackEncode = msgpack.encode + +local jsonMessage = require(game.ServerStorage.JsonMessage) +local msgpackMessage = require(game.ServerStorage.MsgpackMessage) + +return { + + ParameterGenerator = function() end, + + Functions = { + ["JSONDecode & JSONEncode"] = function(Profiler) + Profiler.Begin("JSONDecode") + local x = httpService:JSONDecode(jsonMessage) + Profiler.End() + Profiler.Begin("JSONEncode") + httpService:JSONEncode(x) + Profiler.End() + end, + + ["msgpack.decode & msgpack.encode"] = function(Profiler) + Profiler.Begin("msgpack.decode") + local x = msgpackDecode(msgpackMessage) + Profiler.End() + Profiler.Begin("msgpack.encode") + msgpackEncode(x) + Profiler.End() + end + } + +} diff --git a/plugin/Packages/msgpack-luau/benchmark/decode.bench.lua b/plugin/Packages/msgpack-luau/benchmark/decode.bench.lua new file mode 100644 index 00000000..c22c7a4e --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/decode.bench.lua @@ -0,0 +1,23 @@ +local msgpack = require(game.ReplicatedStorage.msgpack) + +local httpService = game:GetService("HttpService") +local msgpackDecode = msgpack.decode + +local jsonMessage = require(game.ServerStorage.JsonMessage) +local msgpackMessage = require(game.ServerStorage.MsgpackMessage) + +return { + + ParameterGenerator = function() end, + + Functions = { + ["JSONDecode"] = function(Profiler) + httpService:JSONDecode(jsonMessage) + end, + + ["msgpack.decode"] = function(Profiler) + msgpackDecode(msgpackMessage) + end + } + +} diff --git a/plugin/Packages/msgpack-luau/benchmark/encode.bench.lua b/plugin/Packages/msgpack-luau/benchmark/encode.bench.lua new file mode 100644 index 00000000..05dfcea1 --- /dev/null +++ b/plugin/Packages/msgpack-luau/benchmark/encode.bench.lua @@ -0,0 +1,23 @@ +local msgpack = require(game.ReplicatedStorage.msgpack) + +local httpService = game:GetService("HttpService") +local msgpackEncode = msgpack.encode + +local jsonMessage = require(game.ServerStorage.JsonMessage) +local data = httpService:JSONDecode(jsonMessage) + +return { + + ParameterGenerator = function() end, + + Functions = { + ["JSONEncode"] = function(Profiler) + httpService:JSONEncode(data) + end, + + ["msgpack.encode"] = function(Profiler) + msgpackEncode(data) + end + } + +} diff --git a/plugin/Packages/msgpack-luau/default.project.json b/plugin/Packages/msgpack-luau/default.project.json new file mode 100644 index 00000000..6725663b --- /dev/null +++ b/plugin/Packages/msgpack-luau/default.project.json @@ -0,0 +1,7 @@ +{ + "name": "msgpack", + "globIgnorePaths": ["**/*.spec.lua"], + "tree": { + "$path": "src/msgpack.lua" + } +} diff --git a/plugin/Packages/msgpack-luau/src/msgpack.lua b/plugin/Packages/msgpack-luau/src/msgpack.lua new file mode 100644 index 00000000..34ddd1b4 --- /dev/null +++ b/plugin/Packages/msgpack-luau/src/msgpack.lua @@ -0,0 +1,868 @@ +--!native +--!strict +local msgpack = {} + +local band = bit32.band +local bor = bit32.bor +local bufferCreate = buffer.create +local bufferLen = buffer.len +local bufferCopy = buffer.copy +local readstring = buffer.readstring +local writestring = buffer.writestring +local readu8 = buffer.readu8 +local readi8 = buffer.readi8 +local writeu8 = buffer.writeu8 +local writei8 = buffer.writei8 +local lshift = bit32.lshift +local extract = bit32.extract +local ldexp = math.ldexp +local frexp = math.frexp +local floor = math.floor +local modf = math.modf +local sign = math.sign +local ssub = string.sub +local char = string.char +local sbyte = string.byte +local concat = table.concat +local tableCreate = table.create + +-- MsgPack numbers are big-endian, buffer methods are little-endian +-- Will need to reverse 16 and 32 bit ints, floats and doubles +local function reverse(b: buffer, offset: number, count: number): () + for i=1,count//2 do + local byte = readu8(b, offset + i - 1) + bufferCopy(b, offset + i - 1, b, offset + count - i, 1) + writeu8(b, offset + count - i, byte) + end +end + +local function writeu16(b: buffer, offset: number, value: number): () + buffer.writeu16(b, offset, value) + reverse(b, offset, 2) +end + +local function writei16(b: buffer, offset: number, value: number): () + buffer.writei16(b, offset, value) + reverse(b, offset, 2) +end + +local function writeu32(b: buffer, offset: number, value: number): () + buffer.writeu32(b, offset, value) + reverse(b, offset, 4) +end + +local function writei32(b: buffer, offset: number, value: number): () + buffer.writei32(b, offset, value) + reverse(b, offset, 4) +end + +local function writef32(b: buffer, offset: number, value: number): () + buffer.writef32(b, offset, value) + reverse(b, offset, 4) +end + +local function writef64(b: buffer, offset: number, value: number): () + buffer.writef64(b, offset, value) + reverse(b, offset, 8) +end + +local function readu16(b: buffer, offset: number): number + reverse(b, offset, 2) + return buffer.readu16(b, offset) +end + +local function readi16(b: buffer, offset: number): number + reverse(b, offset, 2) + return buffer.readi16(b, offset) +end + +local function readu32(b: buffer, offset: number): number + reverse(b, offset, 4) + return buffer.readu32(b, offset) +end + +local function readi32(b: buffer, offset: number): number + reverse(b, offset, 4) + return buffer.readi32(b, offset) +end + +local function readf32(b: buffer, offset: number): number + reverse(b, offset, 4) + return buffer.readf32(b, offset) +end + +local function readf64(b: buffer, offset: number): number + reverse(b, offset, 8) + return buffer.readf64(b, offset) +end + +local function parse(message: buffer, offset: number): (any, number) + local byte = readu8(message, offset) + + if byte == 0xC0 then -- nil + return nil, offset + 1 + + elseif byte == 0xC2 then -- false + return false, offset + 1 + + elseif byte == 0xC3 then -- true + return true, offset + 1 + + elseif byte == 0xC4 then -- bin 8 + local length = readu8(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 2, length) + return newBuf, offset + 2 + length + + elseif byte == 0xC5 then -- bin 16 + local length = readu16(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 3, length) + return newBuf, offset + 3 + length + + elseif byte == 0xC6 then -- bin 32 + local length = readu32(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 5, length) + return newBuf, offset + 5 + length + + elseif byte == 0xC7 then -- ext 8 + local length = readu8(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 3, length) + return msgpack.Extension.new( + readu8(message, offset + 2), + newBuf + ), + offset + 3 + length + + elseif byte == 0xC8 then -- ext 16 + local length = readu16(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 4, length) + return msgpack.Extension.new( + readu8(message, offset + 3), + newBuf + ), + offset + 4 + length + + elseif byte == 0xC9 then -- ext 32 + local length = readu32(message, offset + 1) + local newBuf = bufferCreate(length) + bufferCopy(newBuf, 0, message, offset + 6, length) + return msgpack.Extension.new( + readu8(message, offset + 5), + newBuf + ), + offset + 6 + length + + elseif byte == 0xCA then -- float 32 + return readf32(message, offset + 1), + offset + 5 + + elseif byte == 0xCB then -- float 64 + return readf64(message, offset + 1), + offset + 9 + + elseif byte == 0xCC then -- uint 8 + return readu8(message, offset + 1), + offset + 2 + + elseif byte == 0xCD then -- uint 16 + return readu16(message, offset + 1), + offset + 3 + + elseif byte == 0xCE then -- uint 32 + return readu32(message, offset + 1), + offset + 5 + + elseif byte == 0xCF then -- uint 64 + return msgpack.UInt64.new( + readu32(message, offset + 1), + readu32(message, offset + 5) + ), + offset + 9 + + elseif byte == 0xD0 then -- int 8 + return readi8(message, offset + 1), offset + 2 + + elseif byte == 0xD1 then -- int 16 + return readi16(message, offset + 1), offset + 3 + + elseif byte == 0xD2 then -- int 32 + return readi32(message, offset + 1), offset + 5 + + elseif byte == 0xD3 then -- int 64 + return msgpack.Int64.new( + readu32(message, offset + 1), + readu32(message, offset + 5) + ), + offset + 9 + + elseif byte == 0xD4 then -- fixext 1 + local newBuf = bufferCreate(1) + bufferCopy(newBuf, 0, message, offset + 2, 1) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 3 + + elseif byte == 0xD5 then -- fixext 2 + local newBuf = bufferCreate(2) + bufferCopy(newBuf, 0, message, offset + 2, 2) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 4 + + elseif byte == 0xD6 then -- fixext 4 + local newBuf = bufferCreate(4) + bufferCopy(newBuf, 0, message, offset + 2, 4) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 6 + + elseif byte == 0xD7 then -- fixext 8 + local newBuf = bufferCreate(8) + bufferCopy(newBuf, 0, message, offset + 2, 8) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 10 + + elseif byte == 0xD8 then -- fixext 16 + local newBuf = bufferCreate(16) + bufferCopy(newBuf, 0, message, offset + 2, 16) + return msgpack.Extension.new( + readu8(message, offset + 1), + newBuf + ), + offset + 18 + + elseif byte == 0xD9 then -- str 8 + local length = readu8(message, offset + 1) + return readstring(message, offset + 2, length), + offset + 2 + length + + elseif byte == 0xDA then -- str 16 + local length = readu16(message, offset + 1) + return readstring(message, offset + 3, length), + offset + 3 + length + + elseif byte == 0xDB then -- str 32 + local length = readu32(message, offset + 1) + return readstring(message, offset + 5, length), + offset + 5 + length + + elseif byte == 0xDC then -- array 16 + local length = readu16(message, offset + 1) + local array = tableCreate(length) + local newOffset = offset + 3 + + for i=1,length do + array[i], newOffset = parse(message, newOffset) + end + + return array, newOffset + + elseif byte == 0xDD then -- array 32 + local length = readu32(message, offset + 1) + local array = tableCreate(length) + local newOffset = offset + 5 + + for i=1,length do + array[i], newOffset = parse(message, newOffset) + end + + return array, newOffset + + elseif byte == 0xDE then -- map 16 + local length = readu16(message, offset + 1) + local dictionary = {} + local newOffset = offset + 3 + local key + + for _=1,length do + key, newOffset = parse(message, newOffset) + dictionary[key], newOffset = parse(message, newOffset) + end + + return dictionary, newOffset + + elseif byte == 0xDF then -- map 32 + local length = readu32(message, offset + 1) + local dictionary = {} + local newOffset = offset + 5 + local key + + for _=1,length do + key, newOffset = parse(message, newOffset) + dictionary[key], newOffset = parse(message, newOffset) + end + + return dictionary, newOffset + + elseif byte >= 0xE0 then -- negative fixint + return byte - 256, offset + 1 + + elseif byte <= 0x7F then -- positive fixint + return byte, offset + 1 + + elseif byte - 0x80 <= 0x8F - 0x80 then -- fixmap + local length = band(byte, 0xF) + local dictionary = {} + local newOffset = offset + 1 + local key + + for _=1,length do + key, newOffset = parse(message, newOffset) + dictionary[key], newOffset = parse(message, newOffset) + end + + return dictionary, newOffset + + elseif byte - 0x90 <= 0x9F - 0x90 then -- fixarray + local length = band(byte, 0xF) + local array = tableCreate(length) + local newOffset = offset + 1 + + for i=1,length do + array[i], newOffset = parse(message, newOffset) + end + + return array, newOffset + + elseif byte - 0xA0 <= 0xBF - 0xA0 then -- fixstr + local length = byte - 0xA0 + return readstring(message, offset + 1, length), + offset + 1 + length + + end + + error("Not all decoder cases are handled, report as bug to msgpack-luau maintainer") +end + +local function computeLength(data: any, tableSet: {[any]: boolean}): number + local dtype = type(data) + if data == nil then + return 1 + elseif dtype == "boolean" then + return 1 + elseif dtype == "string" then + local length = #data + + if length <= 31 then + return 1 + length + elseif length <= 0xFF then + return 2 + length + elseif length <= 0xFFFF then + return 3 + length + elseif length <= 0xFFFFFFFF then + return 5 + length + end + + error("Could not encode - too long string") + + elseif dtype == "buffer" then + local length = bufferLen(data) + + if length <= 0xFF then + return 2 + length + elseif length <= 0xFFFF then + return 3 + length + elseif length <= 0xFFFFFFFF then + return 5 + length + end + + error("Could not encode - too long binary buffer") + + elseif dtype == "number" then + -- represents NaN, Inf, -Inf as float 32 to save space + if data == 0 then + return 1 + elseif data ~= data then -- NaN + return 5 + elseif data == math.huge then + return 5 + elseif data == -math.huge then + return 5 + end + + local integral, fractional = modf(data) + local sign = sign(data) + + if fractional ~= 0 or integral > 0xFFFFFFFF or integral < -0x80000000 then + -- float 64 + return 9 + end + + if sign > 0 then + if integral <= 127 then -- positive fixint + return 1 + elseif integral <= 0xFF then -- uint 8 + return 2 + elseif integral <= 0xFFFF then -- uint 16 + return 3 + elseif integral <= 0xFFFFFFFF then -- uint 32 + return 5 + end + else + if integral >= -0x20 then -- negative fixint + return 1 + elseif integral >= -0x80 then -- int 8 + return 2 + elseif integral >= -0x8000 then -- int 16 + return 3 + elseif integral >= -0x80000000 then -- int 32 + return 5 + end + end + + error(string.format("Could not encode - unhandled number \"%s\"", typeof(data))) + + elseif dtype == "table" then + local msgpackType = data._msgpackType + + if msgpackType then + if msgpackType == msgpack.Int64 or msgpackType == msgpack.UInt64 then + return 9 + elseif msgpackType == msgpack.Extension then + local length = bufferLen(data.data) + + if length == 1 then + return 3 + elseif length == 2 then + return 4 + elseif length == 4 then + return 6 + elseif length == 8 then + return 10 + elseif length == 16 then + return 18 + elseif length <= 0xFF then + return 3 + length + elseif length <= 0xFFFF then + return 4 + length + elseif length <= 0xFFFFFFFF then + return 6 + length + end + + error("Could not encode - too long extension data") + end + end + + if tableSet[data] then + error("Can not serialize cyclic table") + else + tableSet[data] = true + end + + local length = #data + local mapLength = 0 + + for _,_ in pairs(data) do + mapLength += 1 + end + + local headerLen + if mapLength <= 15 then + headerLen = 1 + elseif mapLength <= 0xFFFF then + headerLen = 3 + elseif mapLength <= 0xFFFFFFFF then + headerLen = 5 + else + if length == mapLength then + error("Could not encode - too long array") + else + error("Could not encode - too long map") + end + end + + if length == mapLength then -- array + local contentLen = 0 + for _,v in ipairs(data) do + contentLen += computeLength(v, tableSet) + end + + return headerLen + contentLen + + else -- map + local contentLen = 0 + for k,v in pairs(data) do + contentLen += computeLength(k, tableSet) + contentLen += computeLength(v, tableSet) + end + + return headerLen + contentLen + end + end + + error(string.format("Could not encode - unsupported datatype \"%s\"", typeof(data))) +end + +local extensionTypeLUT = { + [1] = 0xD4, + [2] = 0xD5, + [4] = 0xD6, + [8] = 0xD7, + [16] = 0xD8, +} + +local function encode(result: buffer, offset: number, data: any): number + + local dtype = type(data) + if data == nil then + writestring(result, offset, "\xC0") + return offset + 1 + elseif data == false then + writestring(result, offset, "\xC2") + return offset + 1 + elseif data == true then + writestring(result, offset, "\xC3") + return offset + 1 + elseif dtype == "string" then + local length = #data + + if length <= 31 then + writeu8(result, offset, bor(0xA0, length)) + writestring(result, offset + 1, data) + return offset + 1 + length + elseif length <= 0xFF then + writeu8(result, offset, 0xD9) + writeu8(result, offset + 1, length) + writestring(result, offset + 2, data) + return offset + 2 + length + elseif length <= 0xFFFF then + writeu8(result, offset, 0xDA) + writeu16(result, offset + 1, length) + writestring(result, offset + 3, data) + return offset + 3 + length + elseif length <= 0xFFFFFFFF then + writeu8(result, offset, 0xDB) + writeu32(result, offset + 1, length) + writestring(result, offset + 5, data) + return offset + 5 + length + end + + error("Could not encode - too long string") + + elseif dtype == "buffer" then + local length = bufferLen(data) + + if length <= 0xFF then + writeu8(result, offset, 0xC4) + writeu8(result, offset + 1, length) + bufferCopy(result, offset + 2, data) + return offset + 2 + length + elseif length <= 0xFFFF then + writeu8(result, offset, 0xC5) + writeu16(result, offset + 1, length) + bufferCopy(result, offset + 3, data) + return offset + 3 + length + elseif length <= 0xFFFFFFFF then + writeu8(result, offset, 0xC6) + writeu32(result, offset + 1, length) + bufferCopy(result, offset + 5, data) + return offset + 5 + length + end + + error("Could not encode - too long binary buffer") + + elseif dtype == "number" then + -- represents NaN, Inf, -Inf as float 32 to save space + if data == 0 then + writeu8(result, offset, 0) + return offset + 1 + elseif data ~= data then -- NaN + writestring(result, offset, "\xCA\x7F\x80\x00\x01") + return offset + 5 + elseif data == math.huge then + writestring(result, offset, "\xCA\x7F\x80\x00\x00") + return offset + 5 + elseif data == -math.huge then + writestring(result, offset, "\xCA\xFF\x80\x00\x00") + return offset + 5 + end + + local integral, fractional = modf(data) + local sign = sign(data) + + if fractional ~= 0 or integral > 0xFFFFFFFF or integral < -0x80000000 then + -- float 64 + writeu8(result, offset, 0xCB) + writef64(result, offset + 1, data) + return offset + 9 + end + + if sign > 0 then + if integral <= 127 then -- positive fixint + writeu8(result, offset, integral) + return offset + 1 + elseif integral <= 0xFF then -- uint 8 + writeu8(result, offset, 0xCC) + writeu8(result, offset + 1, integral) + return offset + 2 + elseif integral <= 0xFFFF then -- uint 16 + writeu8(result, offset, 0xCD) + writeu16(result, offset + 1, integral) + return offset + 3 + elseif integral <= 0xFFFFFFFF then -- uint 32 + writeu8(result, offset, 0xCE) + writeu32(result, offset + 1, integral) + return offset + 5 + end + else + if integral >= -0x20 then -- negative fixint + writeu8(result, offset, bor(0xE0, extract(integral, 0, 5))) + return offset + 1 + elseif integral >= -0x80 then -- int 8 + writeu8(result, offset, 0xD0) + writei8(result, offset + 1, integral) + return offset + 2 + elseif integral >= -0x8000 then -- int 16 + writeu8(result, offset, 0xD1) + writei16(result, offset + 1, integral) + return offset + 3 + elseif integral >= -0x80000000 then -- int 32 + writeu8(result, offset, 0xD2) + writei32(result, offset + 1, integral) + return offset + 5 + end + end + + error(string.format("Could not encode - unhandled number \"%s\"", typeof(data))) + + elseif dtype == "table" then + local msgpackType = data._msgpackType + + if msgpackType then + if msgpackType == msgpack.Int64 or msgpackType == msgpack.UInt64 then + local intType = if msgpackType == msgpack.UInt64 then 0xCF else 0xD3 + writeu8(result, offset, intType) + writeu32(result, offset + 1, data.mostSignificantPart) + writeu32(result, offset + 5, data.leastSignificantPart) + return offset + 9 + elseif msgpackType == msgpack.Extension then + local length = bufferLen(data.data) + local extType = extensionTypeLUT[length] + + if extType then + writeu8(result, offset, extType) + writeu8(result, offset + 1, data.type) + bufferCopy(result, offset + 2, data.data) + return offset + 2 + length + end + + if length <= 0xFF then + writeu8(result, offset, 0xC7) + writeu8(result, offset + 1, length) + writeu8(result, offset + 2, data.type) + bufferCopy(result, offset + 3, data.data) + return offset + 3 + length + elseif length <= 0xFFFF then + writeu8(result, offset, 0xC8) + writeu16(result, offset + 1, length) + writeu8(result, offset + 3, data.type) + bufferCopy(result, offset + 4, data.data) + return offset + 4 + length + elseif length <= 0xFFFFFFFF then + writeu8(result, offset, 0xC9) + writeu32(result, offset + 1, length) + writeu8(result, offset + 5, data.type) + bufferCopy(result, offset + 6, data.data) + return offset + 6 + length + end + + error("Could not encode - too long extension data") + end + end + + local length = #data + local mapLength = 0 + + for _,_ in pairs(data) do + mapLength += 1 + end + + if length == mapLength then -- array + local newOffset = offset + if length <= 15 then + writeu8(result, offset, bor(0x90, mapLength)) + newOffset += 1 + elseif length <= 0xFFFF then + writeu8(result, offset, 0xDC) + writeu16(result, offset + 1, length) + newOffset += 3 + elseif length <= 0xFFFFFFFF then + writeu8(result, offset, 0xDD) + writeu32(result, offset + 1, length) + newOffset += 5 + else + error("Could not encode - too long array") + end + + for _,v in ipairs(data) do + newOffset = encode(result, newOffset, v) + end + + return newOffset + + else -- map + local newOffset = offset + if mapLength <= 15 then + writeu8(result, offset, bor(0x80, mapLength)) + newOffset += 1 + elseif mapLength <= 0xFFFF then + writeu8(result, offset, 0xDE) + writeu16(result, offset + 1, mapLength) + newOffset += 3 + elseif mapLength <= 0xFFFFFFFF then + writeu8(result, offset, 0xDF) + writeu32(result, offset + 1, mapLength) + newOffset += 5 + else + error("Could not encode - too long map") + end + + for k,v in pairs(data) do + newOffset = encode(result, newOffset, k) + newOffset = encode(result, newOffset, v) + end + + return newOffset + end + end + + error(string.format("Could not encode - unsupported datatype \"%s\"", typeof(data))) +end + +msgpack.Int64 = {} + +function msgpack.Int64.new(mostSignificantPart: number, leastSignificantPart: number): Int64 + return { + _msgpackType = msgpack.Int64, + mostSignificantPart = mostSignificantPart, + leastSignificantPart = leastSignificantPart + } +end + +msgpack.UInt64 = {} + +function msgpack.UInt64.new(mostSignificantPart: number, leastSignificantPart: number): UInt64 + return { + _msgpackType = msgpack.UInt64, + mostSignificantPart = mostSignificantPart, + leastSignificantPart = leastSignificantPart + } +end + +msgpack.Extension = {} + +function msgpack.Extension.new(extensionType: number, blob: buffer): Extension + return { + _msgpackType = msgpack.Extension, + type = extensionType, + data = blob + } +end + +function msgpack.utf8Encode(message: string): string + local messageLength = #message + local nBytes = math.ceil(messageLength * (8 / 7)) + local result = bufferCreate(nBytes) + + local bitPointer = 0 + for i=1,nBytes do + local j = 1 + floor(bitPointer / 8) + local bitRemainder = bitPointer % 8 + local byte = sbyte(message, j) + + if bitRemainder == 0 then + writeu8(result, i-1, extract(byte, 1, 7)) + elseif bitRemainder == 1 then + writeu8(result, i-1, extract(byte, 0, 7)) + else + local nextByte = sbyte(message, j+1) or 0 + writeu8(result, i-1, bor( + lshift(extract(byte, 0, 8 - bitRemainder), bitRemainder - 1), + extract(nextByte, 9 - bitRemainder, bitRemainder - 1) + )) + end + + bitPointer += 7 + end + + return buffer.tostring(result) +end + +function msgpack.utf8Decode(message: string): string + local nBytes = floor(#message * 7 / 8) + local result = bufferCreate(nBytes) + + local bitPointer = 0 + for i=1,nBytes do + local bitRemainder = bitPointer % 7 + local byte = sbyte(message, 1 + floor(bitPointer / 7)) + local nextByte = sbyte(message, 2 + floor(bitPointer / 7)) + + writeu8(result, i-1, bor( + lshift(extract(byte, 0, 7 - bitRemainder), bitRemainder + 1), + extract(nextByte, 6 - bitRemainder, 1 + bitRemainder) + )) + + bitPointer += 8 + end + + return buffer.tostring(result) +end + +function msgpack.decode(message: string): any + if message == "" then + error("Could not decode - input string is too short") + end + local messageBuf = buffer.fromstring(message) + return (parse(messageBuf, 0)) +end + +function msgpack.encode(data: any): string + local length = computeLength(data, {}) + local result = bufferCreate(length) + encode(result, 0, data) + return buffer.tostring(result) +end + +export type Int64 = { _msgpackType: typeof(msgpack.Int64), mostSignificantPart: number, leastSignificantPart: number } +export type UInt64 = { _msgpackType: typeof(msgpack.UInt64), mostSignificantPart: number, leastSignificantPart: number } +export type Extension = { _msgpackType: typeof(msgpack.Extension), type:number, data: buffer } + +return msgpack + +--[[ +MIT License + +Copyright (c) 2024 Valts Liepiņš + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +]] diff --git a/plugin/Packages/msgpack-luau/src/msgpack.spec.lua b/plugin/Packages/msgpack-luau/src/msgpack.spec.lua new file mode 100644 index 00000000..cbb41876 --- /dev/null +++ b/plugin/Packages/msgpack-luau/src/msgpack.spec.lua @@ -0,0 +1,543 @@ +local function hex(str) + local result = table.create(2*#str - 1) + + for i=1,#str do + result[2*(i-1)+1] = string.format("%02X", string.byte(str, i)) + + if i ~= #str then + result[2*(i-1)+2] = " " + end + end + + return table.concat(result) +end + +return function() + local msgpack = require(script.Parent.msgpack) + + describe("decode", function() + it("can decode nil value", function() + local message = "\xC0" + expect(msgpack.decode(message)).to.equal(nil) + end) + + it("can decode false value", function() + local message = "\xC2" + expect(msgpack.decode(message)).to.equal(false) + end) + + it("can decode true value", function() + local message = "\xC3" + expect(msgpack.decode(message)).to.equal(true) + end) + + it("can decode positive fixint value", function() + expect(msgpack.decode("\x0C")).to.equal(12) + expect(msgpack.decode("\x00")).to.equal(0) + expect(msgpack.decode("\x7f")).to.equal(127) + end) + + it("can decode negative fixint value", function() + expect(msgpack.decode("\xE0")).to.equal(-32) + expect(msgpack.decode("\xFF")).to.equal(-1) + expect(msgpack.decode("\xE7")).to.equal(-25) + end) + + it("can decode uint 8 value", function() + expect(msgpack.decode("\xCC\x00")).to.equal(0) + expect(msgpack.decode("\xCC\xFF")).to.equal(255) + expect(msgpack.decode("\xCC\x0F")).to.equal(15) + end) + + it("can decode uint 16 value", function() + expect(msgpack.decode("\xCD\x00\x00")).to.equal(0) + expect(msgpack.decode("\xCD\xFF\xFF")).to.equal(65535) + expect(msgpack.decode("\xCD\x00\xFF")).to.equal(255) + end) + + it("can decode uint 32 value", function() + expect(msgpack.decode("\xCE\x00\x00\x00\x00")).to.equal(0) + expect(msgpack.decode("\xCE\xFF\xFF\xFF\xFF")).to.equal(4294967295) + expect(msgpack.decode("\xCE\x00\x00\xFF\xFF")).to.equal(65535) + end) + + it("can decode uint 64 value", function() + local zeroValue = msgpack.decode("\xCF\x00\x00\x00\x00\x00\x00\x00\x00") + expect(zeroValue._msgpackType).to.equal(msgpack.UInt64) + expect(zeroValue.mostSignificantPart).to.equal(0) + expect(zeroValue.leastSignificantPart).to.equal(0) + + local maxValue = msgpack.decode("\xCF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF") + expect(maxValue.mostSignificantPart).to.equal(4294967295) + expect(maxValue.leastSignificantPart).to.equal(4294967295) + + local midValue = msgpack.decode("\xCF\x00\x00\x00\x00\xFF\xFF\xFF\xFF") + expect(midValue.mostSignificantPart).to.equal(0) + expect(midValue.leastSignificantPart).to.equal(4294967295) + end) + + it("can decode int 8 value", function() + expect(msgpack.decode("\xD0\x00")).to.equal(0) + expect(msgpack.decode("\xD0\xFF")).to.equal(-1) + expect(msgpack.decode("\xD0\x0F")).to.equal(15) + expect(msgpack.decode("\xD0\x7F")).to.equal(127) + expect(msgpack.decode("\xD0\x80")).to.equal(-128) + end) + + it("can decode int 16 value", function() + expect(msgpack.decode("\xD1\x00\x00")).to.equal(0) + expect(msgpack.decode("\xD1\xFF\xFF")).to.equal(-1) + expect(msgpack.decode("\xD1\x00\xFF")).to.equal(255) + expect(msgpack.decode("\xD1\x7F\xFF")).to.equal(32767) + expect(msgpack.decode("\xD1\x80\x00")).to.equal(-32768) + end) + + it("can decode int 32 value", function() + expect(msgpack.decode("\xD2\x00\x00\x00\x00")).to.equal(0) + expect(msgpack.decode("\xD2\xFF\xFF\xFF\xFF")).to.equal(-1) + expect(msgpack.decode("\xD2\x00\x00\xFF\xFF")).to.equal(65535) + expect(msgpack.decode("\xD2\x7F\xFF\xFF\xFF")).to.equal(2147483647) + expect(msgpack.decode("\xD2\x80\x00\x00\x00")).to.equal(-2147483648) + end) + + it("can decode int 64 value", function() + local zeroValue = msgpack.decode("\xD3\x00\x00\x00\x00\x00\x00\x00\x00") + expect(zeroValue._msgpackType).to.equal(msgpack.Int64) + expect(zeroValue.mostSignificantPart).to.equal(0) + expect(zeroValue.leastSignificantPart).to.equal(0) + + local maxValue = msgpack.decode("\xD3\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF") + expect(maxValue.mostSignificantPart).to.equal(4294967295) + expect(maxValue.leastSignificantPart).to.equal(4294967295) + + local midValue = msgpack.decode("\xD3\x00\x00\x00\x00\xFF\xFF\xFF\xFF") + expect(midValue.mostSignificantPart).to.equal(0) + expect(midValue.leastSignificantPart).to.equal(4294967295) + end) + + it("can decode float 32 value", function() + expect(msgpack.decode("\xCA\x00\x00\x00\x00")).to.equal(0) + expect(msgpack.decode("\xCA\x40\x00\x00\x00")).to.equal(2) + expect(msgpack.decode("\xCA\xC0\x00\x00\x00")).to.equal(-2) + expect(msgpack.decode("\xCA\x7F\x80\x00\x00")).to.equal(math.huge) + expect(msgpack.decode("\xCA\xFF\x80\x00\x00")).to.equal(-math.huge) + + local nan = msgpack.decode("\xCA\xFF\x80\x00\x01") + expect(nan).to.never.equal(nan) + end) + + it("can decode float 64 value", function() + expect(msgpack.decode("\xCB\x00\x00\x00\x00\x00\x00\x00\x00")).to.equal(0) + expect(msgpack.decode("\xCB\x40\x00\x00\x00\x00\x00\x00\x00")).to.equal(2) + expect(msgpack.decode("\xCB\xC0\x00\x00\x00\x00\x00\x00\x00")).to.equal(-2) + expect(msgpack.decode("\xCB\x7F\xF0\x00\x00\x00\x00\x00\x00")).to.equal(math.huge) + expect(msgpack.decode("\xCB\xFF\xF0\x00\x00\x00\x00\x00\x00")).to.equal(-math.huge) + + local nan = msgpack.decode("\xCB\xFF\xF0\x00\x00\x00\x00\x00\x01") + expect(nan).to.never.equal(nan) + end) + + it("can decode fixstr value", function() + expect(msgpack.decode("\xA0")).to.equal("") + expect(msgpack.decode("\xA1\x78")).to.equal("x") + expect(msgpack.decode("\xAB\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64")).to.equal("hello world") + expect(msgpack.decode("\xBF\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61\x61")).to.equal("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") + end) + + it("can decode str 8 value", function() + expect(msgpack.decode("\xD9\x00")).to.equal("") + expect(msgpack.decode("\xD9\x01\x78")).to.equal("x") + expect(msgpack.decode("\xD9\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64")).to.equal("hello world") + end) + + it("can decode str 16 value", function() + expect(msgpack.decode("\xDA\x00\x00")).to.equal("") + expect(msgpack.decode("\xDA\x00\x01\x78")).to.equal("x") + expect(msgpack.decode("\xDA\x00\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64")).to.equal("hello world") + end) + + it("can decode str 32 value", function() + expect(msgpack.decode("\xDB\x00\x00\x00\x00")).to.equal("") + expect(msgpack.decode("\xDB\x00\x00\x00\x01\x78")).to.equal("x") + expect(msgpack.decode("\xDB\x00\x00\x00\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64")).to.equal("hello world") + end) + + it("can decode bin 8 value", function() + local emptyBinary = msgpack.decode("\xC4\x00") + expect(type(emptyBinary)).to.equal("buffer") + expect(buffer.tostring(emptyBinary)).to.equal("") + + local xBinary = msgpack.decode("\xC4\x01\x78") + expect(buffer.tostring(xBinary)).to.equal("x") + + local helloBinary = msgpack.decode("\xC4\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64") + expect(buffer.tostring(helloBinary)).to.equal("hello world") + end) + + it("can decode bin 16 value", function() + local emptyBinary = msgpack.decode("\xC5\x00\x00") + expect(type(emptyBinary)).to.equal("buffer") + expect(buffer.tostring(emptyBinary)).to.equal("") + + local xBinary = msgpack.decode("\xC5\x00\x01\x78") + expect(buffer.tostring(xBinary)).to.equal("x") + + local helloBinary = msgpack.decode("\xC5\x00\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64") + expect(buffer.tostring(helloBinary)).to.equal("hello world") + end) + + it("can decode bin 32 value", function() + local emptyBinary = msgpack.decode("\xC6\x00\x00\x00\x00") + expect(type(emptyBinary)).to.equal("buffer") + expect(buffer.tostring(emptyBinary)).to.equal("") + + local xBinary = msgpack.decode("\xC6\x00\x00\x00\x01\x78") + expect(buffer.tostring(xBinary)).to.equal("x") + + local helloBinary = msgpack.decode("\xC6\x00\x00\x00\x0B\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64") + expect(buffer.tostring(helloBinary)).to.equal("hello world") + end) + + it("can decode fixarray value", function() + local emptyArray = msgpack.decode("\x90") + expect(emptyArray).to.be.a("table") + expect(#emptyArray).to.equal(0) + expect(next(emptyArray)).never.to.be.ok() + + local filledArray = msgpack.decode("\x93\xC0\xC2\xC3") + expect(#filledArray).to.equal(3) + expect(filledArray[1]).to.equal(nil) + expect(filledArray[2]).to.equal(false) + expect(filledArray[3]).to.equal(true) + + local arrayWithString = msgpack.decode("\x93\xC2\xA5\x68\x65\x6C\x6C\x6F\xC3") + expect(#arrayWithString).to.equal(3) + expect(arrayWithString[1]).to.equal(false) + expect(arrayWithString[2]).to.equal("hello") + expect(arrayWithString[3]).to.equal(true) + end) + + it("can decode array 16 value", function() + local emptyArray = msgpack.decode("\xDC\x00\x00") + expect(emptyArray).to.be.a("table") + expect(#emptyArray).to.equal(0) + expect(next(emptyArray)).never.to.be.ok() + + local filledArray = msgpack.decode("\xDC\x00\x03\xC0\xC2\xC3") + expect(#filledArray).to.equal(3) + expect(filledArray[1]).to.equal(nil) + expect(filledArray[2]).to.equal(false) + expect(filledArray[3]).to.equal(true) + + local arrayWithString = msgpack.decode("\xDC\x00\x03\xC2\xA5\x68\x65\x6C\x6C\x6F\xC3") + expect(#arrayWithString).to.equal(3) + expect(arrayWithString[1]).to.equal(false) + expect(arrayWithString[2]).to.equal("hello") + expect(arrayWithString[3]).to.equal(true) + end) + + it("can decode array 32 value", function() + local emptyArray = msgpack.decode("\xDD\x00\x00\x00\x00") + expect(emptyArray).to.be.a("table") + expect(#emptyArray).to.equal(0) + expect(next(emptyArray)).never.to.be.ok() + + local filledArray = msgpack.decode("\xDD\x00\x00\x00\x03\xC0\xC2\xC3") + expect(#filledArray).to.equal(3) + expect(filledArray[1]).to.equal(nil) + expect(filledArray[2]).to.equal(false) + expect(filledArray[3]).to.equal(true) + + local arrayWithString = msgpack.decode("\xDD\x00\x00\x00\x03\xC2\xA5\x68\x65\x6C\x6C\x6F\xC3") + expect(#arrayWithString).to.equal(3) + expect(arrayWithString[1]).to.equal(false) + expect(arrayWithString[2]).to.equal("hello") + expect(arrayWithString[3]).to.equal(true) + end) + + it("can decode fixmap value", function() + local emptyMap = msgpack.decode("\x80") + expect(emptyMap).to.be.a("table") + expect(#emptyMap).to.equal(0) + expect(next(emptyMap)).never.to.be.ok() + + local filledMap = msgpack.decode("\x82\xA5\x68\x65\x6C\x6C\x6F\xA5\x77\x6F\x72\x6C\x64\x7B\xC3") + expect(#filledMap).to.equal(0) + expect(next(filledMap)).to.be.ok() + expect(filledMap["hello"]).to.equal("world") + expect(filledMap[123]).to.equal(true) + end) + + it("can decode map 16 value", function() + local emptyMap = msgpack.decode("\xDE\x00\x00") + expect(emptyMap).to.be.a("table") + expect(#emptyMap).to.equal(0) + expect(next(emptyMap)).never.to.be.ok() + + local filledMap = msgpack.decode("\xDE\x00\x02\xA5\x68\x65\x6C\x6C\x6F\xA5\x77\x6F\x72\x6C\x64\x7B\xC3") + expect(#filledMap).to.equal(0) + expect(next(filledMap)).to.be.ok() + expect(filledMap["hello"]).to.equal("world") + expect(filledMap[123]).to.equal(true) + end) + + it("can decode map 32 value", function() + local emptyMap = msgpack.decode("\xDF\x00\x00\x00\x00") + expect(emptyMap).to.be.a("table") + expect(#emptyMap).to.equal(0) + expect(next(emptyMap)).never.to.be.ok() + + local filledMap = msgpack.decode("\xDF\x00\x00\x00\x02\xA5\x68\x65\x6C\x6C\x6F\xA5\x77\x6F\x72\x6C\x64\x7B\xC3") + expect(#filledMap).to.equal(0) + expect(next(filledMap)).to.be.ok() + expect(filledMap["hello"]).to.equal("world") + expect(filledMap[123]).to.equal(true) + end) + + it("can decode fixext 1 value", function() + local extension = msgpack.decode("\xD4\x7B\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("x") + end) + + it("can decode fixext 2 value", function() + local extension = msgpack.decode("\xD5\x7B\x78\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("xx") + end) + + it("can decode fixext 4 value", function() + local extension = msgpack.decode("\xD6\x7B\x78\x78\x78\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("xxxx") + end) + + it("can decode fixext 8 value", function() + local extension = msgpack.decode("\xD7\x7B\x78\x78\x78\x78\x78\x78\x78\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("xxxxxxxx") + end) + + it("can decode fixext 16 value", function() + local extension = msgpack.decode("\xD8\x7B\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("xxxxxxxxxxxxxxxx") + end) + + it("can decode ext 8 value", function() + local emptyExtension = msgpack.decode("\xC7\x00\x7B") + expect(emptyExtension._msgpackType).to.equal(msgpack.Extension) + expect(emptyExtension.type).to.equal(123) + expect(buffer.tostring(emptyExtension.data)).to.equal("") + + local extension = msgpack.decode("\xC7\x01\x7B\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("x") + end) + + it("can decode ext 16 value", function() + local emptyExtension = msgpack.decode("\xC8\x00\x00\x7B") + expect(emptyExtension._msgpackType).to.equal(msgpack.Extension) + expect(emptyExtension.type).to.equal(123) + expect(buffer.tostring(emptyExtension.data)).to.equal("") + + local extension = msgpack.decode("\xC8\x00\x01\x7B\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("x") + end) + + it("can decode ext 32 value", function() + local emptyExtension = msgpack.decode("\xC9\x00\x00\x00\x00\x7B") + expect(emptyExtension._msgpackType).to.equal(msgpack.Extension) + expect(emptyExtension.type).to.equal(123) + expect(buffer.tostring(emptyExtension.data)).to.equal("") + + local extension = msgpack.decode("\xC9\x00\x00\x00\x01\x7B\x78") + expect(extension._msgpackType).to.equal(msgpack.Extension) + expect(extension.type).to.equal(123) + expect(buffer.tostring(extension.data)).to.equal("x") + end) + end) + + describe("encode", function() + it("can encode nil value", function() + expect(hex(msgpack.encode(nil))).to.equal("C0") + end) + + it("can encode false value", function() + expect(hex(msgpack.encode(false))).to.equal("C2") + end) + + it("can encode true value", function() + expect(hex(msgpack.encode(true))).to.equal("C3") + end) + + it("can encode string value", function() + expect(hex(msgpack.encode(""))).to.equal("A0") + expect(hex(msgpack.encode("xyz"))).to.equal("A3 78 79 7A") + + local xs = string.rep("x", 0x20) + expect(msgpack.encode(xs)).to.equal("\xD9\x20" .. xs) + + xs = string.rep("x", 0x100) + expect(msgpack.encode(xs)).to.equal("\xDA\x01\x00" .. xs) + + xs = string.rep("x", 0x10000) + expect(msgpack.encode(xs)).to.equal("\xDB\x00\x01\x00\x00" .. xs) + end) + + it("can encode positive integers", function() + expect(hex(msgpack.encode(0))).to.equal("00") + expect(hex(msgpack.encode(1))).to.equal("01") + expect(hex(msgpack.encode(127))).to.equal("7F") + expect(hex(msgpack.encode(128))).to.equal("CC 80") + expect(hex(msgpack.encode(255))).to.equal("CC FF") + expect(hex(msgpack.encode(256))).to.equal("CD 01 00") + expect(hex(msgpack.encode(65535))).to.equal("CD FF FF") + expect(hex(msgpack.encode(65536))).to.equal("CE 00 01 00 00") + expect(hex(msgpack.encode(4294967295))).to.equal("CE FF FF FF FF") + end) + + it("can encode negative integers", function() + expect(hex(msgpack.encode(-1))).to.equal("FF") + expect(hex(msgpack.encode(-32))).to.equal("E0") + expect(hex(msgpack.encode(-33))).to.equal("D0 DF") + expect(hex(msgpack.encode(-128))).to.equal("D0 80") + expect(hex(msgpack.encode(-129))).to.equal("D1 FF 7F") + expect(hex(msgpack.encode(-32768))).to.equal("D1 80 00") + expect(hex(msgpack.encode(-32769))).to.equal("D2 FF FF 7F FF") + expect(hex(msgpack.encode(-2147483648))).to.equal("D2 80 00 00 00") + end) + + it("can encode floating points", function() + expect(hex(msgpack.encode(0 / 0))).to.equal("CA 7F 80 00 01") + expect(hex(msgpack.encode(math.huge))).to.equal("CA 7F 80 00 00") + expect(hex(msgpack.encode(-math.huge))).to.equal("CA FF 80 00 00") + expect(hex(msgpack.encode(0.1))).to.equal("CB 3F B9 99 99 99 99 99 9A") + expect(hex(msgpack.encode(-0.1))).to.equal("CB BF B9 99 99 99 99 99 9A") + expect(hex(msgpack.encode(1234.56789))).to.equal("CB 40 93 4A 45 84 F4 C6 E7") + expect(hex(msgpack.encode(1.7976931348623157e+308))).to.equal("CB 7F EF FF FF FF FF FF FF") + expect(hex(msgpack.encode(-1.7976931348623157e+308))).to.equal("CB FF EF FF FF FF FF FF FF") + expect(hex(msgpack.encode(2.2250738585072014e-308))).to.equal("CB 00 10 00 00 00 00 00 00") + expect(hex(msgpack.encode(-2.2250738585072014e-308))).to.equal("CB 80 10 00 00 00 00 00 00") + end) + + it("can encode Int64 and UInt64 representations", function() + expect(hex(msgpack.encode(msgpack.Int64.new(0xFFFFFFFF, 0xFFFFFFFF)))).to.equal("D3 FF FF FF FF FF FF FF FF") + expect(hex(msgpack.encode(msgpack.Int64.new(0xFAFBFCFD, 0xFEFDFCFB)))).to.equal("D3 FA FB FC FD FE FD FC FB") + expect(hex(msgpack.encode(msgpack.UInt64.new(0xFFFFFFFF, 0xFFFFFFFF)))).to.equal("CF FF FF FF FF FF FF FF FF") + expect(hex(msgpack.encode(msgpack.UInt64.new(0xFAFBFCFD, 0xFEFDFCFB)))).to.equal("CF FA FB FC FD FE FD FC FB") + end) + + it("can encode buffer value", function() + expect(hex(msgpack.encode(buffer.fromstring("")))).to.equal("C4 00") + expect(hex(msgpack.encode(buffer.fromstring("xyz")))).to.equal("C4 03 78 79 7A") + + local xs = string.rep("x", 0x20) + expect(msgpack.encode(buffer.fromstring(xs))).to.equal("\xC4\x20" .. xs) + + xs = string.rep("x", 0x100) + expect(msgpack.encode(buffer.fromstring(xs))).to.equal("\xC5\x01\x00" .. xs) + + xs = string.rep("x", 0x10000) + expect(msgpack.encode(buffer.fromstring(xs))).to.equal("\xC6\x00\x01\x00\x00" .. xs) + end) + + it("can encode Extension value", function() + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring(""))))).to.equal("C7 00 7B") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("x"))))).to.equal("D4 7B 78") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("xy"))))).to.equal("D5 7B 78 79") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("wxyz"))))).to.equal("D6 7B 77 78 79 7A") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("wxyzwxyz"))))).to.equal("D7 7B 77 78 79 7A 77 78 79 7A") + expect(hex(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring("wxyzwxyzwxyzwxyz"))))).to.equal("D8 7B 77 78 79 7A 77 78 79 7A 77 78 79 7A 77 78 79 7A") + + local xs = string.rep("x", 0x20) + expect(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring(xs)))).to.equal("\xC7\x20\x7B" .. xs) + + xs = string.rep("x", 0x100) + expect(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring(xs)))).to.equal("\xC8\x01\x00\x7B" .. xs) + + xs = string.rep("x", 0x10000) + expect(msgpack.encode(msgpack.Extension.new(123, buffer.fromstring(xs)))).to.equal("\xC9\x00\x01\x00\x00\x7B" .. xs) + end) + + it("can encode array-like tables", function() + expect(hex(msgpack.encode({}))).to.equal("90") + expect(hex(msgpack.encode({1,2,3}))).to.equal("93 01 02 03") + + local t,s = table.create(15, 0), string.rep("\x00", 15) + expect(msgpack.encode(t)).to.equal("\x9F" .. s) + + t,s = table.create(30, 0), string.rep("\x00", 30) + expect(msgpack.encode(t)).to.equal("\xDC\x00\x1E" .. s) + + t,s = table.create(70000, 0), string.rep("\x00", 70000) + expect(msgpack.encode(t)).to.equal("\xDD\x00\x01\x11\x70" .. s) + end) + + it("can encode map-like tables", function() + expect(hex(msgpack.encode({a=1}))).to.equal("81 A1 61 01") + expect(hex(msgpack.encode({1, a=1}))).to.equal("82 01 01 A1 61 01") + + local t,s = table.create(15, 0), string.rep("\x00", 15) + expect(msgpack.encode(t)).to.equal("\x9F" .. s) + + t,s = table.create(30, 0), string.rep("\x00", 30) + expect(msgpack.encode(t)).to.equal("\xDC\x00\x1E" .. s) + + t,s = table.create(70000, 0), string.rep("\x00", 70000) + expect(msgpack.encode(t)).to.equal("\xDD\x00\x01\x11\x70" .. s) + end) + + it("can handle cyclic tables", function() + local cyclicTable = {} + cyclicTable.self = cyclicTable + expect(function() + msgpack.encode(cyclicTable) + end).to.throw("Can not serialize cyclic table") + end) + end) + + describe("utf8Encode", function() + it("can encode a binary string as UTF-8", function() + expect(msgpack.utf8Encode("")).to.equal("") + + local binary = string.char(0b11111111) + local utf = string.char(0b01111111, 0b01000000) + expect(hex(msgpack.utf8Encode(binary))).to.equal(hex(utf)) + + binary = string.char(0b11110000, 0b00111100, 0b00001111) + utf = string.char(0b01111000, 0b00001111, 0b00000001, 0b01110000) + expect(hex(msgpack.utf8Encode(binary))).to.equal(hex(utf)) + + binary = string.char(0b11111111):rep(8) + utf = string.char(0b01111111):rep(9) .. string.char(0b01000000) + expect(hex(msgpack.utf8Encode(binary))).to.equal(hex(utf)) + end) + end) + + describe("utf8Decode", function() + it("can decode a binary string encoded as UTF-8", function() + expect(msgpack.utf8Decode("")).to.equal("") + + local utf = string.char(0b01111111, 0b01000000) + local binary = string.char(0b11111111) + expect(hex(msgpack.utf8Decode(utf))).to.equal(hex(binary)) + + utf = string.char(0b01111000, 0b00001111, 0b00000001, 0b01110000) + binary = string.char(0b11110000, 0b00111100, 0b00001111) + expect(hex(msgpack.utf8Decode(utf))).to.equal(hex(binary)) + + utf = string.char(0b01111111):rep(9) .. string.char(0b01000000) + binary = string.char(0b11111111):rep(8) + expect(hex(msgpack.utf8Decode(utf))).to.equal(hex(binary)) + end) + end) +end diff --git a/plugin/Packages/msgpack-luau/test-runner.server.lua b/plugin/Packages/msgpack-luau/test-runner.server.lua new file mode 100644 index 00000000..7d70c4a1 --- /dev/null +++ b/plugin/Packages/msgpack-luau/test-runner.server.lua @@ -0,0 +1,3 @@ +local TestEZ = require(game.ReplicatedStorage.Packages.TestEZ) + +TestEZ.TestBootstrap:run({game.ReplicatedStorage}) diff --git a/plugin/Packages/msgpack-luau/testing.project.json b/plugin/Packages/msgpack-luau/testing.project.json new file mode 100644 index 00000000..e2adcf6e --- /dev/null +++ b/plugin/Packages/msgpack-luau/testing.project.json @@ -0,0 +1,26 @@ +{ + "name": "msgpack-luau", + "tree": { + "$className": "DataModel", + + "ReplicatedStorage": { + "$className": "ReplicatedStorage", + + "msgpack": { + "$path": "src" + }, + + "Packages": { + "$path": "DevPackages" + } + }, + + "ServerScriptService": { + "$className": "ServerScriptService", + + "TestRunner": { + "$path": "test-runner.server.lua" + } + } + } +} diff --git a/plugin/Packages/msgpack-luau/wally.lock b/plugin/Packages/msgpack-luau/wally.lock new file mode 100644 index 00000000..707e28aa --- /dev/null +++ b/plugin/Packages/msgpack-luau/wally.lock @@ -0,0 +1,13 @@ +# This file is automatically @generated by Wally. +# It is not intended for manual editing. +registry = "test" + +[[package]] +name = "cipharius/msgpack-luau" +version = "0.3.0" +dependencies = [["TestEZ", "roblox/testez@0.4.1"]] + +[[package]] +name = "roblox/testez" +version = "0.4.1" +dependencies = [] diff --git a/plugin/Packages/msgpack-luau/wally.toml b/plugin/Packages/msgpack-luau/wally.toml new file mode 100644 index 00000000..6777e765 --- /dev/null +++ b/plugin/Packages/msgpack-luau/wally.toml @@ -0,0 +1,11 @@ +[package] +name = "cipharius/msgpack-luau" +description = "A pure MessagePack binary serialization format implementation in Luau." +version = "0.3.0" +license = "MIT" +authors = ["Valts Liepiņš "] +realm = "shared" +registry = "https://github.com/UpliftGames/wally-index" + +[dev-dependencies] +TestEZ = "roblox/testez@0.4.1" diff --git a/plugin/http/Response.lua b/plugin/http/Response.lua index 1230a1c9..b02ff644 100644 --- a/plugin/http/Response.lua +++ b/plugin/http/Response.lua @@ -1,5 +1,7 @@ local HttpService = game:GetService("HttpService") +local msgpack = require(script.Parent.Parent.msgpack) + local stringTemplate = [[ Http.Response { code: %d @@ -31,4 +33,8 @@ function Response:json() return HttpService:JSONDecode(self.body) end +function Response:msgpack() + return msgpack.decode(self.body) +end + return Response diff --git a/plugin/http/init.lua b/plugin/http/init.lua index cac0ebc4..106ebc45 100644 --- a/plugin/http/init.lua +++ b/plugin/http/init.lua @@ -1,7 +1,8 @@ local HttpService = game:GetService("HttpService") -local Promise = require(script.Parent.Promise) local Log = require(script.Parent.Log) +local msgpack = require(script.Parent.msgpack) +local Promise = require(script.Parent.Promise) local HttpError = require(script.Error) local HttpResponse = require(script.Response) @@ -68,4 +69,12 @@ function Http.jsonDecode(source) return HttpService:JSONDecode(source) end +function Http.msgpackEncode(object) + return msgpack.encode(object) +end + +function Http.msgpackDecode(source) + return msgpack.decode(source) +end + return Http diff --git a/plugin/src/ApiContext.lua b/plugin/src/ApiContext.lua index cbbffcc1..fbaa0f3f 100644 --- a/plugin/src/ApiContext.lua +++ b/plugin/src/ApiContext.lua @@ -145,7 +145,7 @@ function ApiContext:connect() return Http.get(url) :andThen(rejectFailedRequests) - :andThen(Http.Response.json) + :andThen(Http.Response.msgpack) :andThen(rejectWrongProtocolVersion) :andThen(function(body) assert(validateApiInfo(body)) @@ -163,7 +163,7 @@ end function ApiContext:read(ids) local url = ("%s/api/read/%s"):format(self.__baseUrl, table.concat(ids, ",")) - return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(body) + return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.msgpack):andThen(function(body) if body.sessionId ~= self.__sessionId then return Promise.reject("Server changed ID") end @@ -191,9 +191,9 @@ function ApiContext:write(patch) table.insert(updated, fixedUpdate) end - -- Only add the 'added' field if the table is non-empty, or else Roblox's - -- JSON implementation will turn the table into an array instead of an - -- object, causing API validation to fail. + -- Only add the 'added' field if the table is non-empty, or else the msgpack + -- encode implementation will turn the table into an array instead of a map, + -- causing API validation to fail. local added if next(patch.added) ~= nil then added = patch.added @@ -206,13 +206,16 @@ function ApiContext:write(patch) added = added, } - body = Http.jsonEncode(body) + body = Http.msgpackEncode(body) - return Http.post(url, body):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(responseBody) - Log.info("Write response: {:?}", responseBody) + return Http.post(url, body) + :andThen(rejectFailedRequests) + :andThen(Http.Response.msgpack) + :andThen(function(responseBody) + Log.info("Write response: {:?}", responseBody) - return responseBody - end) + return responseBody + end) end function ApiContext:connectWebSocket(packetHandlers) @@ -234,7 +237,7 @@ function ApiContext:connectWebSocket(packetHandlers) local closed, errored, received received = self.__wsClient.MessageReceived:Connect(function(msg) - local data = Http.jsonDecode(msg) + local data = Http.msgpackDecode(msg) if data.sessionId ~= self.__sessionId then Log.warn("Received message with wrong session ID; ignoring") return @@ -280,7 +283,7 @@ end function ApiContext:open(id) local url = ("%s/api/open/%s"):format(self.__baseUrl, id) - return Http.post(url, ""):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(body) + return Http.post(url, ""):andThen(rejectFailedRequests):andThen(Http.Response.msgpack):andThen(function(body) if body.sessionId ~= self.__sessionId then return Promise.reject("Server changed ID") end @@ -292,7 +295,7 @@ end function ApiContext:serialize(ids: { string }) local url = ("%s/api/serialize/%s"):format(self.__baseUrl, table.concat(ids, ",")) - return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(body) + return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.msgpack):andThen(function(body) if body.sessionId ~= self.__sessionId then return Promise.reject("Server changed ID") end @@ -306,7 +309,7 @@ end function ApiContext:refPatch(ids: { string }) local url = ("%s/api/ref-patch/%s"):format(self.__baseUrl, table.concat(ids, ",")) - return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.json):andThen(function(body) + return Http.get(url):andThen(rejectFailedRequests):andThen(Http.Response.msgpack):andThen(function(body) if body.sessionId ~= self.__sessionId then return Promise.reject("Server changed ID") end diff --git a/plugin/src/Reconciler/diff.lua b/plugin/src/Reconciler/diff.lua index fb4c79d0..5ada1207 100644 --- a/plugin/src/Reconciler/diff.lua +++ b/plugin/src/Reconciler/diff.lua @@ -54,6 +54,11 @@ local function trueEquals(a, b): boolean end return true + -- For NaN, check if both values are not equal to themselves + elseif a ~= a and b ~= b then + print("they are equal") + return true + -- For numbers, compare with epsilon of 0.0001 to avoid floating point inequality elseif typeA == "number" and typeB == "number" then return fuzzyEq(a, b, 0.0001) diff --git a/src/snapshot/patch_compute.rs b/src/snapshot/patch_compute.rs index cc3fbbbb..412c677a 100644 --- a/src/snapshot/patch_compute.rs +++ b/src/snapshot/patch_compute.rs @@ -8,7 +8,7 @@ use rbx_dom_weak::{ ustr, HashMapExt as _, UstrMap, UstrSet, }; -use crate::{RojoRef, REF_POINTER_ATTRIBUTE_PREFIX}; +use crate::{variant_eq::variant_eq, RojoRef, REF_POINTER_ATTRIBUTE_PREFIX}; use super::{ patch::{PatchAdd, PatchSet, PatchUpdate}, @@ -127,7 +127,7 @@ fn compute_property_patches( match instance.properties().get(&name) { Some(instance_value) => { - if &snapshot_value != instance_value { + if !variant_eq(&snapshot_value, instance_value) { changed_properties.insert(name, Some(snapshot_value)); } } diff --git a/src/web/api.rs b/src/web/api.rs index 8e7ce72f..57b99e2e 100644 --- a/src/web/api.rs +++ b/src/web/api.rs @@ -19,7 +19,6 @@ use rbx_dom_weak::{ }; use crate::{ - json, serve_session::ServeSession, snapshot::{InstanceWithMeta, PatchSet, PatchUpdate}, web::{ @@ -28,9 +27,9 @@ use crate::{ ServerInfoResponse, SocketPacket, SocketPacketBody, SocketPacketType, SubscribeMessage, WriteRequest, WriteResponse, PROTOCOL_VERSION, SERVER_VERSION, }, - util::{json, json_ok}, + util::{deserialize_msgpack, msgpack, msgpack_ok, serialize_msgpack}, }, - web_api::{BufferEncode, InstanceUpdate, RefPatchResponse, SerializeResponse}, + web_api::{InstanceUpdate, RefPatchResponse, SerializeResponse}, }; pub async fn call(serve_session: Arc, mut request: Request) -> Response { @@ -45,7 +44,7 @@ pub async fn call(serve_session: Arc, mut request: Request) if is_upgrade_request(&request) { service.handle_api_socket(&mut request).await } else { - json( + msgpack( ErrorResponse::bad_request( "/api/socket must be called as a websocket upgrade request", ), @@ -65,7 +64,7 @@ pub async fn call(serve_session: Arc, mut request: Request) } (&Method::POST, "/api/write") => service.handle_api_write(request).await, - (_method, path) => json( + (_method, path) => msgpack( ErrorResponse::not_found(format!("Route not found: {}", path)), StatusCode::NOT_FOUND, ), @@ -86,7 +85,7 @@ impl ApiService { let tree = self.serve_session.tree(); let root_instance_id = tree.get_root_id(); - json_ok(&ServerInfoResponse { + msgpack_ok(&ServerInfoResponse { server_version: SERVER_VERSION.to_owned(), protocol_version: PROTOCOL_VERSION, session_id: self.serve_session.session_id(), @@ -105,7 +104,7 @@ impl ApiService { let input_cursor: u32 = match argument.parse() { Ok(v) => v, Err(err) => { - return json( + return msgpack( ErrorResponse::bad_request(format!("Malformed message cursor: {}", err)), StatusCode::BAD_REQUEST, ); @@ -116,7 +115,7 @@ impl ApiService { let (response, websocket) = match upgrade(request, None) { Ok(result) => result, Err(err) => { - return json( + return msgpack( ErrorResponse::internal_error(format!("WebSocket upgrade failed: {}", err)), StatusCode::INTERNAL_SERVER_ERROR, ); @@ -143,10 +142,10 @@ impl ApiService { let body = body::to_bytes(request.into_body()).await.unwrap(); - let request: WriteRequest = match json::from_slice(&body) { + let request: WriteRequest = match deserialize_msgpack(&body) { Ok(request) => request, Err(err) => { - return json( + return msgpack( ErrorResponse::bad_request(format!("Invalid body: {}", err)), StatusCode::BAD_REQUEST, ); @@ -154,7 +153,7 @@ impl ApiService { }; if request.session_id != session_id { - return json( + return msgpack( ErrorResponse::bad_request("Wrong session ID"), StatusCode::BAD_REQUEST, ); @@ -180,7 +179,7 @@ impl ApiService { }) .unwrap(); - json_ok(WriteResponse { session_id }) + msgpack_ok(WriteResponse { session_id }) } async fn handle_api_read(&self, request: Request) -> Response { @@ -190,7 +189,7 @@ impl ApiService { let requested_ids = match requested_ids { Ok(ids) => ids, Err(_) => { - return json( + return msgpack( ErrorResponse::bad_request("Malformed ID list"), StatusCode::BAD_REQUEST, ); @@ -214,7 +213,7 @@ impl ApiService { } } - json_ok(ReadResponse { + msgpack_ok(ReadResponse { session_id: self.serve_session.session_id(), message_cursor, instances, @@ -235,7 +234,7 @@ impl ApiService { let requested_ids = match requested_ids { Ok(ids) => ids, Err(_) => { - return json( + return msgpack( ErrorResponse::bad_request("Malformed ID list"), StatusCode::BAD_REQUEST, ); @@ -268,7 +267,7 @@ impl ApiService { response_dom.transfer_within(child_ref, object_value); } else { - json( + msgpack( ErrorResponse::bad_request(format!("provided id {id} is not in the tree")), StatusCode::BAD_REQUEST, ); @@ -279,9 +278,9 @@ impl ApiService { let mut source = Vec::new(); rbx_binary::to_writer(&mut source, &response_dom, &[response_dom.root_ref()]).unwrap(); - json_ok(SerializeResponse { + msgpack_ok(SerializeResponse { session_id: self.serve_session.session_id(), - model_contents: BufferEncode::new(source), + model_contents: source, }) } @@ -297,7 +296,7 @@ impl ApiService { let requested_ids = match requested_ids { Ok(ids) => ids, Err(_) => { - return json( + return msgpack( ErrorResponse::bad_request("Malformed ID list"), StatusCode::BAD_REQUEST, ); @@ -331,7 +330,7 @@ impl ApiService { } } - json_ok(RefPatchResponse { + msgpack_ok(RefPatchResponse { session_id: self.serve_session.session_id(), patch: SubscribeMessage { added: HashMap::new(), @@ -347,7 +346,7 @@ impl ApiService { let requested_id = match Ref::from_str(argument) { Ok(id) => id, Err(_) => { - return json( + return msgpack( ErrorResponse::bad_request("Invalid instance ID"), StatusCode::BAD_REQUEST, ); @@ -359,7 +358,7 @@ impl ApiService { let instance = match tree.get_instance(requested_id) { Some(instance) => instance, None => { - return json( + return msgpack( ErrorResponse::bad_request("Instance not found"), StatusCode::NOT_FOUND, ); @@ -369,7 +368,7 @@ impl ApiService { let script_path = match pick_script_path(instance) { Some(path) => path, None => { - return json( + return msgpack( ErrorResponse::bad_request( "No appropriate file could be found to open this script", ), @@ -382,7 +381,7 @@ impl ApiService { Ok(()) => {} Err(error) => match error { OpenError::Io(io_error) => { - return json( + return msgpack( ErrorResponse::internal_error(format!( "Attempting to open {} failed because of the following io error: {}", script_path.display(), @@ -396,7 +395,7 @@ impl ApiService { status, stderr, } => { - return json( + return msgpack( ErrorResponse::internal_error(format!( r#"The command '{}' to open '{}' failed with the error code '{}'. Error logs: @@ -412,7 +411,7 @@ impl ApiService { }, }; - json_ok(OpenResponse { + msgpack_ok(OpenResponse { session_id: self.serve_session.session_id(), }) } @@ -476,7 +475,7 @@ async fn handle_websocket_subscription( match result { Ok((new_cursor, messages)) => { if !messages.is_empty() { - let json_message = { + let msgpack_message = { let tree = tree_handle.lock().unwrap(); let api_messages = messages .into_iter() @@ -492,12 +491,12 @@ async fn handle_websocket_subscription( }), }; - serde_json::to_string(&response)? + serialize_msgpack(response)? }; log::debug!("Sending batch of messages over WebSocket subscription"); - if websocket.send(Message::Text(json_message)).await.is_err() { + if websocket.send(Message::Binary(msgpack_message)).await.is_err() { // Client disconnected log::debug!("WebSocket subscription closed by client"); break; diff --git a/src/web/interface.rs b/src/web/interface.rs index 4871ec97..a0d5459b 100644 --- a/src/web/interface.rs +++ b/src/web/interface.rs @@ -242,31 +242,8 @@ pub struct OpenResponse { #[serde(rename_all = "camelCase")] pub struct SerializeResponse { pub session_id: SessionId, - pub model_contents: BufferEncode, -} - -/// Using this struct we can force Roblox to JSONDecode this as a buffer. -/// This is what Roblox's serde APIs use, so it saves a step in the plugin. -#[derive(Debug, Serialize, Deserialize)] -pub struct BufferEncode { - m: (), - t: Cow<'static, str>, - base64: String, -} - -impl BufferEncode { - pub fn new(content: Vec) -> Self { - let base64 = data_encoding::BASE64.encode(&content); - Self { - m: (), - t: Cow::Borrowed("buffer"), - base64, - } - } - - pub fn model(&self) -> &str { - &self.base64 - } + #[serde(with = "serde_bytes")] + pub model_contents: Vec, } #[derive(Debug, Serialize, Deserialize)] diff --git a/src/web/util.rs b/src/web/util.rs index 2b6882e5..1c1cbb50 100644 --- a/src/web/util.rs +++ b/src/web/util.rs @@ -1,8 +1,48 @@ use hyper::{header::CONTENT_TYPE, Body, Response, StatusCode}; -use serde::Serialize; +use serde::{Deserialize, Serialize}; -pub fn json_ok(value: T) -> Response { - json(value, StatusCode::OK) +pub fn msgpack_ok(value: T) -> Response { + msgpack(value, StatusCode::OK) +} + +pub fn msgpack(value: T, code: StatusCode) -> Response { + let mut serialized = Vec::new(); + let mut serializer = rmp_serde::Serializer::new(&mut serialized) + .with_human_readable() + .with_struct_map(); + + if let Err(err) = value.serialize(&mut serializer) { + return Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .header(CONTENT_TYPE, "text/plain") + .body(Body::from(err.to_string())) + .unwrap(); + }; + + Response::builder() + .status(code) + .header(CONTENT_TYPE, "application/msgpack") + .body(Body::from(serialized)) + .unwrap() +} + +pub fn serialize_msgpack(value: T) -> anyhow::Result> { + let mut serialized = Vec::new(); + let mut serializer = rmp_serde::Serializer::new(&mut serialized) + .with_human_readable() + .with_struct_map(); + + value.serialize(&mut serializer)?; + + Ok(serialized) +} + +pub fn deserialize_msgpack<'a, T: Deserialize<'a>>( + input: &'a [u8], +) -> Result { + let mut deserializer = rmp_serde::Deserializer::new(input).with_human_readable(); + + T::deserialize(&mut deserializer) } pub fn json(value: T, code: StatusCode) -> Response { diff --git a/tests/rojo_test/serve_util.rs b/tests/rojo_test/serve_util.rs index 9036316f..d4f3b6d6 100644 --- a/tests/rojo_test/serve_util.rs +++ b/tests/rojo_test/serve_util.rs @@ -11,6 +11,7 @@ use std::{ use hyper_tungstenite::tungstenite::{connect, Message}; use rbx_dom_weak::types::Ref; +use serde::Deserialize; use tempfile::{tempdir, TempDir}; use librojo::web_api::{ @@ -158,22 +159,16 @@ impl TestServeSession { pub fn get_api_rojo(&self) -> Result { let url = format!("http://localhost:{}/api/rojo", self.port); - let body = reqwest::blocking::get(url)?.text()?; + let body = reqwest::blocking::get(url)?.bytes()?; - let value = jsonc_parser::parse_to_serde_value(&body, &Default::default()) - .expect("Failed to parse JSON") - .expect("No JSON value"); - Ok(serde_json::from_value(value).expect("Server returned malformed response")) + Ok(deserialize_msgpack(&body).expect("Server returned malformed response")) } pub fn get_api_read(&self, id: Ref) -> Result, reqwest::Error> { let url = format!("http://localhost:{}/api/read/{}", self.port, id); - let body = reqwest::blocking::get(url)?.text()?; + let body = reqwest::blocking::get(url)?.bytes()?; - let value = jsonc_parser::parse_to_serde_value(&body, &Default::default()) - .expect("Failed to parse JSON") - .expect("No JSON value"); - Ok(serde_json::from_value(value).expect("Server returned malformed response")) + Ok(deserialize_msgpack(&body).expect("Server returned malformed response")) } pub fn get_api_socket_packet( @@ -235,10 +230,20 @@ impl TestServeSession { let url = format!("http://localhost:{}/api/serialize/{}", self.port, id_list); - reqwest::blocking::get(url)?.json() + let body = reqwest::blocking::get(url)?.bytes()?; + + Ok(deserialize_msgpack(&body).expect("Server returned malformed response")) } } +fn deserialize_msgpack<'a, T: Deserialize<'a>>( + input: &'a [u8], +) -> Result { + let mut deserializer = rmp_serde::Deserializer::new(input).with_human_readable(); + + T::deserialize(&mut deserializer) +} + /// Probably-okay way to generate random enough port numbers for running the /// Rojo live server. /// @@ -256,11 +261,7 @@ fn get_port_number() -> usize { /// Since the provided structure intentionally includes unredacted referents, /// some post-processing is done to ensure they don't show up in the model. pub fn serialize_to_xml_model(response: &SerializeResponse, redactions: &RedactionMap) -> String { - let model_content = data_encoding::BASE64 - .decode(response.model_contents.model().as_bytes()) - .unwrap(); - - let mut dom = rbx_binary::from_reader(model_content.as_slice()).unwrap(); + let mut dom = rbx_binary::from_reader(response.model_contents.as_slice()).unwrap(); // This makes me realize that maybe we need a `descendants_mut` iter. let ref_list: Vec = dom.descendants().map(|inst| inst.referent()).collect(); for referent in ref_list {