LyoqCiAqIFRoaXMgZmlsZSBmb3IgZ2VuZXJhbCBleGNlcHRpb25zIHRoaXMgb3VyIEpTIGNvZGUgY2FuIHRocm93LiAKICogV2Uga2VlcCB0aGUgZXhjcGV0aW9uIGRlZmluaXRpb25zIGluIHRoZSBzYW1lIHBsYWNlIHNvIHlvdSBjYW4gCiAqIGtub3cgd2hlcmUgdG8gbG9vayB0aGVtIHVwIGluIHRoZSBmdXR1cmUuIAogKiAKKi8KCi8qKgogKiBUaGlzIGlzIHRoZSBiYXNpYyBlcnJvciBjbGFzcy4gQWxsIG90aGVyIGVycm9ycyBzaG91bGQgdHlwaWNhbGx5IGV4dGVuZCB0aGlzIGNsYXNzLCBidXQgdGhleSBkb24ndCBoYXZlIHRvCiAqLwpjbGFzcyBCb29rRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAvKioKICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBFcnJvciBtZXNzYWdlCiAgICAgKi8KICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHsKICAgICAgICBzdXBlcihtZXNzYWdlKQogICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZQogICAgICAgIHRoaXMuc2hvd0Vycm9yVG9Vc2VySWZUaGlzSXNVbkNhdWdodCA9IGZhbHNlCiAgICB9Cn0KCmNsYXNzIFNob3dhYmxlRXJyb3IgZXh0ZW5kcyBCb29rRXJyb3IgewogICAgLyoqCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBFcnJvciBtZXNzYWdlLCBzaG91bGQgYmUgbWVhbnQgZm9yIHRoZSB1c2VyIHRvIHVuZGVyc3RhbmQKICAgICAqLwogICAgY29uc3RydWN0b3IobWVzc2FnZSkgewogICAgICAgIHN1cGVyKG1lc3NhZ2UpCiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lCiAgICAgICAgdGhpcy5zaG93RXJyb3JUb1VzZXJJZlRoaXNJc1VuQ2F1Z2h0ID0gdHJ1ZQogICAgfQp9CgpjbGFzcyBVbmFibGVUb1VzZVNlbGVjdGVkREJUeXBlIGV4dGVuZHMgU2hvd2FibGVFcnJvciB7CiAgICBjb25zdHJ1Y3RvcihkYl90eXBlKSB7CiAgICAgICAgc3VwZXIoYCdEYXRhYmFzZSB0eXBlICIke2RiX3R5cGV9IiBub3Qgc3VwcG9ydGVkYCkKICAgICAgICB0aGlzLmRiX3R5cGUgPSBkYl90eXBlCiAgICB9Cn0KY2xhc3MgQ2Fubm90SW5pdGlhbGl6ZUl0ZW1UaGF0QWxyZWFkeUV4c2lzdHMgZXh0ZW5kcyBCb29rRXJyb3IgewogICAgY29uc3RydWN0b3IoaXRlbU5hbWUpIHsKICAgICAgICBzdXBlcihgQ2Fubm90IEluaXRsaXplIEl0ZW0gVGhhdCBBbHJlYWR5IEV4c2lzdHMuIFRyeWluZyB0byBpbml0aWFsaXplOiAke2l0ZW1OYW1lfWApCiAgICB9Cn0KCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIGR1cmluZyB0aGUgZ3JhZGluZyBydW50aW1lCiAqLwpjbGFzcyBkd0V4Y2VwdGlvbiBleHRlbmRzIFNob3dhYmxlRXJyb3IgewogICAgY29uc3RydWN0b3IobWVzc2FnZSwgZXJyb3JfbWVzc2FnZSwga2luZCkgewogICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CiAgICAgICAgdGhpcy5raW5kID0ga2luZDsKICAgICAgICB0aGlzLmVycm9yX21lc3NhZ2UgPSBlcnJvcl9tZXNzYWdlOwogICAgICAgIHRoaXMubmFtZSA9ICdkYXRhLndvcmxkIGV4Y2VwdGlvbic7CiAgICB9Cn0KCmNsYXNzIERhdGFUb0xhcmdlRm9yRmlyZXN0b3JlIGV4dGVuZHMgQm9va0Vycm9yIHsKICAgIGNvbnN0cnVjdG9yKHNpemUpewogICAgICAgIHN1cGVyKGBUaGUgZGF0YSB5b3UgYXJlIHRyeWluZyB0byBzYXZlIHRvIGEgZmlyZXN0b3JlIGZpZWxkIGlzIHRvIGxhcmdlIGJ5ICR7c2l6ZSAtIDFfMDQ4XzQ4N30gYnl0ZXNgKQogICAgfQp9CgoKLy8gc2V0cyBkZWZhdWx0IGVycm9yIGhhbmRsaW5nIGZvciBnbG9iYWwgZnVuY3Rpb25zIHRoYXQgYXJlIGxpc3RlZCBoZXJlLiAKLy8gUHJlZmVyYW5jZSBzaG91bGQgcHJvYmFibHkgYmUgdG8gYWRkIHRoZSBlcnJvciBoYW5kbGluZyB0byB0aGUgZnVuY3Rpb24KLy8gd2hlcmUgaXQgaXMgZGVmaW5lZCwgaG93ZXZlciwgdGhpcyBwcm92aWRlcyBhIGNhdGNoIGFsbCB3ZSBjYW4gdXNlIAovLyB0byBhbGVydCB0aGUgdXNlciBpZiBzb210aGluZyBkcmFzdGljIGhhcyBoYXBwZW5kZWQuIApmdW5jdGlvbiBoYW5kbGVSb290RXJyb3IoZXJyKSB7CiAgICBpZiAoZXJyIGluc3RhbmNlb2YgZHdFeGNlcHRpb24pIHsKICAgICAgICBtZXNzYWdlKHsKICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsCiAgICAgICAgICAgIHRpdGxlOiAiR3JhZGluZyBFcnJvciIsCiAgICAgICAgICAgIGtpbmQ6ICJlcnJvciIsCiAgICAgICAgICAgIHNlY29uZHM6IDgsCiAgICAgICAgICAgIHNob3c6IHRydWUKICAgICAgICB9KQogICAgfSBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBTaG93YWJsZUVycm9yKSB7CiAgICAgICAgbWVzc2FnZSh7CiAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlLAogICAgICAgICAgICB0aXRsZTogIkVycm9yIiwKICAgICAgICAgICAga2luZDogImVycm9yIiwKICAgICAgICAgICAgc2Vjb25kczogOCwKICAgICAgICAgICAgc2hvdzogdHJ1ZQogICAgICAgIH0pCiAgICB9CiAgICAvLyBJZiB3ZSBnZXQgdG8gdGhpcyBwb2ludCwgdGhlbiB3ZSBoYXZlIG5vdCBleHBsaWNpdGx5IHN1cHJlc2VkIHRoZSBlcnJvciwgdGhpcyBtZWFucyB3ZSBzaG91bGQgdGhyb3cgaXQuCiAgICB0aHJvdyBlcnIKfQoKCgo=
person
navigate_before Table of Contents expand_more navigate_next
Loading Page hourglass_empty