##      Package LibPath Version Priority Depends Imports LinkingTo Suggests
##      Enhances License License_is_FOSS License_restricts_use OS_type Archs
##      MD5sum NeedsCompilation Built

4.1. Giới thiệu chương

## Kích thước bộ dữ liệu: 2497 dòng và 11 cột
## tibble [2,497 × 11] (S3: tbl_df/tbl/data.frame)
##  $ Date    : POSIXct[1:2497], format: "2015-01-05" "2015-01-06" ...
##  $ VCB     : num [1:2497] 16822 17929 17718 18245 19458 ...
##  $ MBB     : num [1:2497] 4270 4401 4434 4467 4697 ...
##  $ BID     : num [1:2497] 8197 8388 8642 8642 9214 ...
##  $ CTG     : num [1:2497] 9134 9200 9463 9266 9529 ...
##  $ SHB     : num [1:2497] 3922 3984 4181 4230 4230 ...
##  $ ACB     : num [1:2497] 3780 3820 3985 3989 4042 ...
##  $ STB     : num [1:2497] 13462 13692 13769 13923 14231 ...
##  $ EIB     : num [1:2497] 10667 10833 11000 10917 11167 ...
##  $ VN_INDEX: num [1:2497] 550 552 553 570 574 ...
##  $ RF_daily: num [1:2497] 0.000182 0.000183 0.000183 0.000183 0.00018 ...
## # A tibble: 6 × 10
##   Date                 ret_VCB  ret_MBB ret_BID  ret_CTG ret_SHB  ret_ACB
##   <dttm>                 <dbl>    <dbl>   <dbl>    <dbl>   <dbl>    <dbl>
## 1 2015-01-05 00:00:00 NA       NA       NA      NA       NA      NA      
## 2 2015-01-06 00:00:00  0.0637   0.0303   0.0230  0.00717  0.0156  0.0106 
## 3 2015-01-07 00:00:00 -0.0118   0.00742  0.0298  0.0282   0.0482  0.0422 
## 4 2015-01-08 00:00:00  0.0293   0.00737  0      -0.0211   0.0117  0.00108
## 5 2015-01-09 00:00:00  0.0644   0.0502   0.0641  0.0280   0       0.0130 
## 6 2015-01-12 00:00:00  0.00809 -0.00703  0.0667  0.0137   0.0455  0.0128 
## # ℹ 3 more variables: ret_STB <dbl>, ret_EIB <dbl>, ret_VN_INDEX <dbl>

4.2. Thống kê mô tả

## # A tibble: 9 × 8
##   asset        n mean_ret sd_ret skew_ret kurt_ret  mean_ex  sd_ex
##   <chr>    <int>    <dbl>  <dbl>    <dbl>    <dbl>    <dbl>  <dbl>
## 1 ACB       2496 0.000769 0.0191 -1.02       12.4  0.000651 0.0191
## 2 BID       2496 0.000610 0.0228 -0.198       2.37 0.000500 0.0228
## 3 CTG       2496 0.000569 0.0217 -0.150       2.30 0.000461 0.0217
## 4 EIB       2496 0.000238 0.0220 -0.0810      3.85 0.000130 0.0220
## 5 MBB       2496 0.000654 0.0193 -0.771       7.23 0.000546 0.0194
## 6 SHB       2496 0.000385 0.0251 -0.0359      4.27 0.000277 0.0251
## 7 STB       2496 0.000404 0.0236  0.00696     1.47 0.000289 0.0236
## 8 VCB       2496 0.000677 0.0181 -0.259       4.76 0.000558 0.0181
## 9 VN_INDEX  2496 0.000335 0.0114 -0.942       4.58 0.000230 0.0114
##              ret_VCB ret_MBB ret_BID ret_CTG ret_SHB ret_ACB ret_STB ret_EIB
## ret_VCB        1.000   0.494   0.542   0.561   0.085   0.155   0.398   0.181
## ret_MBB        0.494   1.000   0.608   0.698   0.193   0.293   0.599   0.244
## ret_BID        0.542   0.608   1.000   0.708   0.138   0.220   0.498   0.219
## ret_CTG        0.561   0.698   0.708   1.000   0.146   0.250   0.568   0.284
## ret_SHB        0.085   0.193   0.138   0.146   1.000   0.181   0.189   0.108
## ret_ACB        0.155   0.293   0.220   0.250   0.181   1.000   0.261   0.126
## ret_STB        0.398   0.599   0.498   0.568   0.189   0.261   1.000   0.267
## ret_EIB        0.181   0.244   0.219   0.284   0.108   0.126   0.267   1.000
## ret_VN_INDEX   0.495   0.632   0.548   0.597   0.221   0.313   0.554   0.248
##              ret_VN_INDEX
## ret_VCB             0.495
## ret_MBB             0.632
## ret_BID             0.548
## ret_CTG             0.597
## ret_SHB             0.221
## ret_ACB             0.313
## ret_STB             0.554
## ret_EIB             0.248
## ret_VN_INDEX        1.000

4.3. Ước lượng Camp

## # A tibble: 9 × 9
##   asset     alpha alpha_ci           beta beta_ci p_alpha p_beta r_squared     n
##   <chr>     <dbl> <chr>             <dbl> <chr>     <dbl>  <dbl>     <dbl> <int>
## 1 VCB      0.0004 [-0.0002, 0.001]  0.788 [0.733…   0.231      0    0.246   2495
## 2 MBB      0.0003 [-0.0003, 0.0009] 1.07  [1.021…   0.320      0    0.399   2495
## 3 BID      0.0002 [-0.0005, 0.001]  1.10  [1.032…   0.518      0    0.301   2495
## 4 CTG      0.0002 [-0.0005, 0.0009] 1.14  [1.075…   0.566      0    0.356   2495
## 5 SHB      0.0002 [-0.0008, 0.0011] 0.489 [0.404…   0.738      0    0.049   2495
## 6 ACB      0.0005 [-0.0002, 0.0012] 0.525 [0.462…   0.144      0    0.0984  2495
## 7 STB      0      [-0.0007, 0.0008] 1.15  [1.080…   0.948      0    0.307   2495
## 8 EIB      0      [-0.0008, 0.0009] 0.479 [0.405…   0.964      0    0.0615  2495
## 9 VN_INDEX 0      [0, 0]            1     [1, 1]    0.237      0    1       2495

Phương trình CAPM cho từng mã

Phương trình tổng quát:

\[ R_{i,t} - R_{f,t} = \hat{\alpha}_i + \hat{\beta}_i \,\big( R_{m,t} - R_{f,t} \big) + \varepsilon_{i,t} \]

VCB
\[ R_{\text{VCB},t} - R_{f,t} = 0.0004 + 0.7876 \,\big( R_{m,t} - R_{f,t} \big) \]

MBB
\[ R_{\text{MBB},t} - R_{f,t} = 0.0003 + 1.0731 \,\big( R_{m,t} - R_{f,t} \big) \]

BID
\[ R_{\text{BID},t} - R_{f,t} = 0.0002 + 1.0987 \,\big( R_{m,t} - R_{f,t} \big) \]

CTG
\[ R_{\text{CTG},t} - R_{f,t} = 0.0002 + 1.1352 \,\big( R_{m,t} - R_{f,t} \big) \]

SHB
\[ R_{\text{SHB},t} - R_{f,t} = 0.0002 + 0.4887 \,\big( R_{m,t} - R_{f,t} \big) \]

ACB
\[ R_{\text{ACB},t} - R_{f,t} = 0.0005 + 0.5253 \,\big( R_{m,t} - R_{f,t} \big) \]

STB
\[ R_{\text{STB},t} - R_{f,t} = 0.0000 + 1.1479 \,\big( R_{m,t} - R_{f,t} \big) \]

EIB
\[ R_{\text{EIB},t} - R_{f,t} = 0.0000 + 0.4793 \,\big( R_{m,t} - R_{f,t} \big) \]

VN_INDEX
\[ R_{\text{VN\_INDEX},t} - R_{f,t} = 0.0000 + 1.0000 \,\big( R_{m,t} - R_{f,t} \big) \]

4.4. Lợi suất kì vọng Camp và phân loại định giá

## # A tibble: 9 × 13
##   asset     alpha alpha_ci  beta beta_ci p_alpha p_beta r_squared     n mean_ret
##   <chr>     <dbl> <chr>    <dbl> <chr>     <dbl>  <dbl>     <dbl> <int>    <dbl>
## 1 VCB      0.0004 [-0.000… 0.788 [0.733…   0.231      0    0.246   2495 0.000677
## 2 MBB      0.0003 [-0.000… 1.07  [1.021…   0.320      0    0.399   2495 0.000654
## 3 BID      0.0002 [-0.000… 1.10  [1.032…   0.518      0    0.301   2495 0.000610
## 4 CTG      0.0002 [-0.000… 1.14  [1.075…   0.566      0    0.356   2495 0.000569
## 5 SHB      0.0002 [-0.000… 0.489 [0.404…   0.738      0    0.049   2495 0.000385
## 6 ACB      0.0005 [-0.000… 0.525 [0.462…   0.144      0    0.0984  2495 0.000769
## 7 STB      0      [-0.000… 1.15  [1.080…   0.948      0    0.307   2495 0.000404
## 8 EIB      0      [-0.000… 0.479 [0.405…   0.964      0    0.0615  2495 0.000238
## 9 VN_INDEX 0      [0, 0]   1     [1, 1]    0.237      0    1       2495 0.000335
## # ℹ 3 more variables: er_capm <dbl>, gap <dbl>, price_flag <chr>

LS0tCnRpdGxlOiAiVMOgaSBjaMOtbmggMiIKYXV0aG9yOiAiUGjhuqFtIFh1w6JuIEhvYW4gIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclSDolTTolUywgJWQgLSAlbSAtICVZJylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2NfZGVwdGg6IDQKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jOiB0cnVlCiAgd29yZF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2RlcHRoOiAnNCcKICBwZGZfZG9jdW1lbnQ6CiAgICBsYXRleF9lbmdpbmU6IHhlbGF0ZXgKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAoJZWNobyA9IEZBTFNFLAoJbWVzc2FnZSA9IEZBTFNFLAoJd2FybmluZyA9IEZBTFNFCikKYGBgCgo8c3R5bGU+CmJvZHkgewogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDE2cHg7CiAgdGV4dC1hbGlnbjoganVzdGlmeTsKICBsaW5lLWhlaWdodDogMS41Owp9CmgyIHsKICBjb2xvcjogcmVkOwp9CmgzIHsKICBjb2xvcjogZGFya2JsdWU7Cn0KPC9zdHlsZT4KCmBgYHtyfQppbnN0YWxsZWQucGFja2FnZXMoInhsc3giKQpsaWJyYXJ5KG9wZW54bHN4KQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShEVCkKbGlicmFyeShwYW5kZXIpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShza2ltcikKbGlicmFyeShwc3ljaCkKbGlicmFyeShmb3JtYXR0YWJsZSkKbGlicmFyeShodG1sdG9vbHMpCmxpYnJhcnkoRGVzY1Rvb2xzKQpsaWJyYXJ5KGVwaXRvb2xzKQpsaWJyYXJ5KHBST0MpCmxpYnJhcnkoZ2dyZXBlbCkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKCgojIDQuMS4gR2nhu5tpIHRoaeG7h3UgY2jGsMahbmcKCmBgYHtyfQojID09PT0gNC4xIEdJ4buaSSBUSEnhu4ZVIENIxq/GoE5HID09PT0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKCiMgPT09PSA0LjEgR0nhu5pJIFRISeG7hlUgQ0jGr8agTkcgPT09PQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShyZWFkeGwpCgojIDEuIMSQ4buNYyBmaWxlIEV4Y2VsCmhvYW5nYW5hbHlzaXMgPC0gcmVhZF9leGNlbCgiL1VzZXJzL3BoYW14dWFuaG9hbi9Eb2N1bWVudHMvVGllzILMiXUgbHVhzKPMgm4gL8SQacyjbmggZ2lhzIEgdGHMgGkgc2HMiW4gdGHMgGkgY2hpzIFuaCAyL0R1IGxpZXUgY2h1YW4ueGxzeCIpIHw+CiAgYXJyYW5nZShEYXRlKQoKIyAyLiBYZW0gY+G6pXUgdHLDumMgZOG7ryBsaeG7h3UKY2F0KCJLw61jaCB0aMaw4bubYyBi4buZIGThu68gbGnhu4d1OiIsIG5yb3coaG9hbmdhbmFseXNpcyksICJkw7JuZyB2w6AiLCBuY29sKGhvYW5nYW5hbHlzaXMpLCAiY+G7mXRcbiIpCnN0cihob2FuZ2FuYWx5c2lzKQoKIyAzLiBEYW5oIHPDoWNoIG3DoyBj4buVIHBoaeG6v3UgKGxv4bqhaSBi4buPIGPhu5l0IGNo4buJIHPhu5EgJiBSRikKdGlja2VycyA8LSBzZXRkaWZmKG5hbWVzKGhvYW5nYW5hbHlzaXMpLCBjKCJEYXRlIiwgIlZOX0lOREVYIiwgIlJGX2RhaWx5IikpCgojIDQuIFTDrW5oIGzhu6NpIHN14bqldCBsb2cgY2hvIHThu6tuZyBtw6MgJiBWTl9JTkRFWApyZXR1cm5zIDwtIGhvYW5nYW5hbHlzaXMgfD4KICBtdXRhdGUoYWNyb3NzKGFsbF9vZihjKHRpY2tlcnMsICJWTl9JTkRFWCIpKSwKICAgICAgICAgICAgICAgIH4gbG9nKC54IC8gbGFnKC54KSksIC5uYW1lcyA9ICJyZXRfey5jb2x9IikpIHw+CiAgc2VsZWN0KERhdGUsIHN0YXJ0c193aXRoKCJyZXRfIikpCgojIDUuIELhuqNuZyBs4bujaSBzdeG6pXQgKDYgZMOybmcgxJHhuqd1KQpoZWFkKHJldHVybnMpCgoKYGBgCgojIDQuMi4gVGjhu5FuZyBrw6ogbcO0IHThuqMKCmBgYHtyfQojID09PT0gNC4yIFRI4buQTkcgS8OKIE3DlCBU4bqiIChraMO0bmcgY+G6p24gaG9hbmdhbmFseXNpc19sb25nIOG7nyA0LjEpID09PT0KbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShlMTA3MSkKbGlicmFyeShnZ3Bsb3QyKQoKIyAwKSBYw6FjIMSR4buLbmggY8OhYyBj4buZdCBs4bujaSBzdeG6pXQKcmV0X2NvbHMgPC0gZ3JlcCgiXnJldF8iLCBuYW1lcyhyZXR1cm5zKSwgdmFsdWUgPSBUUlVFKQoKIyAxKSBU4bqhbyBk4buvIGxp4buHdSBMT05HIHThuqFpIMSRw6J5IChrw6htIHJtLCByZiB2w6AgZXhjZXNzKQojICAgIC0gcm06IGzhu6NpIHN14bqldCB0aOG7iyB0csaw4budbmcgPSByZXRfVk5fSU5ERVggKMSRw6MgY8OzIHRyb25nICdyZXR1cm5zJykKIyAgICAtIHJmOiBsw6NpIHN14bqldCBwaGkgcuG7p2kgcm8gdOG7qyBj4buZdCBSRl9kYWlseSBj4bunYSAnaG9hbmdhbmFseXNpcycKaG9hbmdhbmFseXNpc19sb25nIDwtIHJldHVybnMgJT4lCiAgbXV0YXRlKAogICAgcmYgICAgICAgID0gaG9hbmdhbmFseXNpcyRSRl9kYWlseSwKICAgIHJtICAgICAgICA9IC5kYXRhW1sicmV0X1ZOX0lOREVYIl1dLAogICAgcm1fZXhjZXNzID0gcm0gLSByZgogICkgJT4lCiAgcGl2b3RfbG9uZ2VyKAogICAgY29scyAgICAgID0gYWxsX29mKHJldF9jb2xzKSwKICAgIG5hbWVzX3RvICA9ICJhc3NldCIsCiAgICB2YWx1ZXNfdG8gPSAicmkiCiAgKSAlPiUKICBtdXRhdGUoCiAgICBhc3NldCAgICAgPSBnc3ViKCJecmV0XyIsICIiLCBhc3NldCksCiAgICByaV9leGNlc3MgPSByaSAtIHJmCiAgKQoKIyAyKSBUaOG7kW5nIGvDqiBtw7QgdOG6oyB0aGVvIG3DowpkZXNjX3RibCA8LSBob2FuZ2FuYWx5c2lzX2xvbmcgJT4lCiAgZ3JvdXBfYnkoYXNzZXQpICU+JQogIHN1bW1hcmlzZSgKICAgIG4gICAgICAgID0gc3VtKCFpcy5uYShyaSkpLAogICAgbWVhbl9yZXQgPSBtZWFuKHJpLCBuYS5ybSA9IFRSVUUpLAogICAgc2RfcmV0ICAgPSBzZChyaSwgbmEucm0gPSBUUlVFKSwKICAgIHNrZXdfcmV0ID0gc2tld25lc3MocmksIG5hLnJtID0gVFJVRSksCiAgICBrdXJ0X3JldCA9IGt1cnRvc2lzKHJpLCBuYS5ybSA9IFRSVUUpLAogICAgbWVhbl9leCAgPSBtZWFuKHJpX2V4Y2VzcywgbmEucm0gPSBUUlVFKSwKICAgIHNkX2V4ICAgID0gc2QocmlfZXhjZXNzLCBuYS5ybSA9IFRSVUUpLAogICAgLmdyb3VwcyAgPSAiZHJvcCIKICApCgpwcmludChkZXNjX3RibCkKCiMgMykgTWEgdHLhuq1uIHTGsMahbmcgcXVhbiBnaeG7r2EgY8OhYyBs4bujaSBzdeG6pXQgKGJhbyBn4buTbSB0aOG7iyB0csaw4budbmcpCnJldF93aWRlIDwtIHJldHVybnMgJT4lCiAgZHBseXI6OnNlbGVjdChhbGxfb2YocmV0X2NvbHMpKSAlPiUKICB0aWR5cjo6ZHJvcF9uYSgpCgpwcmludChyb3VuZChjb3IocmV0X3dpZGUsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwgMykpCgojIDQpIEJp4buDdSDEkeG7kyBs4bujaSBzdeG6pXQgdGjhu4sgdHLGsOG7nW5nIFZOX0lOREVYIHRoZW8gbmfDoHkKZ2dwbG90KAogIGRhdGEgPSB0aWJibGUoRGF0ZSA9IGhvYW5nYW5hbHlzaXMkRGF0ZSwgcm0gPSByZXR1cm5zJHJldF9WTl9JTkRFWCksCiAgYWVzKHggPSBEYXRlLCB5ID0gcm0pCikgKwogIGdlb21fbGluZSgpICsKICBsYWJzKAogICAgdGl0bGUgPSAiTOG7o2kgc3XhuqV0IG5nw6B5IGPhu6dhIFZOX0lOREVYIChsb2ctcmV0dXJuKSIsCiAgICB4ID0gIk5nw6B5IiwgeSA9ICJybSIKICApICsKICB0aGVtZV9taW5pbWFsKCkKCmBgYAoKCiMgNC4zLiDGr+G7m2MgbMaw4bujbmcgQ2FtcAoKYGBge3J9CiMgPT09PSA0LjMgxq/hu5pDIEzGr+G7ok5HIENBUE0gKGzDoG0gdHLDsm4gNCBjaOG7ryBz4buRIHRo4bqtcCBwaMOibikgPT09PQpsaWJyYXJ5KGJyb29tKQpsaWJyYXJ5KHB1cnJyKQpvcHRpb25zKHNjaXBlbiA9IDk5OSkgIyB0csOhbmggZOG6oW5nIGtob2EgaOG7jWMKCiMgRGFuaCBzw6FjaCBtw6MKdGlja2VycyA8LSB1bmlxdWUoaG9hbmdhbmFseXNpc19sb25nJGFzc2V0KQoKIyBIw6BtIMaw4bubYyBsxrDhu6NuZyBDQVBNIGNobyAxIG3DowpmaXRfY2FwbV9vbmUgPC0gZnVuY3Rpb24oc3ltKSB7CiAgZGYgPC0gaG9hbmdhbmFseXNpc19sb25nIHw+IGZpbHRlcihhc3NldCA9PSBzeW0pIHw+IGRyb3BfbmEocmlfZXhjZXNzLCBybV9leGNlc3MpCiAgaWYgKG5yb3coZGYpIDwgMTApIHJldHVybihOVUxMKQogIAogIG0gPC0gbG0ocmlfZXhjZXNzIH4gcm1fZXhjZXNzLCBkYXRhID0gZGYpCiAgdGQgPC0gdGlkeShtLCBjb25mLmludCA9IFRSVUUpCiAgCiAgdGliYmxlKAogICAgYXNzZXQgICAgPSBzeW0sCiAgICBhbHBoYSAgICA9IHJvdW5kKHRkJGVzdGltYXRlW3RkJHRlcm0gPT0gIihJbnRlcmNlcHQpIl0sIDQpLAogICAgYWxwaGFfY2kgPSBwYXN0ZTAoIlsiLAogICAgICAgICAgICAgICAgICAgICAgcm91bmQodGQkY29uZi5sb3dbdGQkdGVybSA9PSAiKEludGVyY2VwdCkiXSwgNCksICIsICIsCiAgICAgICAgICAgICAgICAgICAgICByb3VuZCh0ZCRjb25mLmhpZ2hbdGQkdGVybSA9PSAiKEludGVyY2VwdCkiXSwgNCksICJdIiksCiAgICBiZXRhICAgICA9IHJvdW5kKHRkJGVzdGltYXRlW3RkJHRlcm0gPT0gInJtX2V4Y2VzcyJdLCA0KSwKICAgIGJldGFfY2kgID0gcGFzdGUwKCJbIiwKICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKHRkJGNvbmYubG93W3RkJHRlcm0gPT0gInJtX2V4Y2VzcyJdLCA0KSwgIiwgIiwKICAgICAgICAgICAgICAgICAgICAgIHJvdW5kKHRkJGNvbmYuaGlnaFt0ZCR0ZXJtID09ICJybV9leGNlc3MiXSwgNCksICJdIiksCiAgICBwX2FscGhhICA9IHJvdW5kKHRkJHAudmFsdWVbdGQkdGVybSA9PSAiKEludGVyY2VwdCkiXSwgNCksCiAgICBwX2JldGEgICA9IHJvdW5kKHRkJHAudmFsdWVbdGQkdGVybSA9PSAicm1fZXhjZXNzIl0sIDQpLAogICAgcl9zcXVhcmVkID0gcm91bmQoZ2xhbmNlKG0pJHIuc3F1YXJlZCwgNCksCiAgICBuICAgICAgICA9IG5vYnMobSkKICApCn0KCiMgQ2jhuqF5IGNobyB04bqldCBj4bqjIG3DowpjYXBtX3RibCA8LSBtYXBfZGZyKHRpY2tlcnMsIGZpdF9jYXBtX29uZSkKCiMgSGnhu4NuIHRo4buLCnByaW50KGNhcG1fdGJsLCBuID0gbnJvdyhjYXBtX3RibCkpCgoKYGBgCgoqKlBoxrDGoW5nIHRyw6xuaCBDQVBNIGNobyB04burbmcgbcOjKioKClBoxrDGoW5nIHRyw6xuaCB04buVbmcgcXXDoXQ6CgokJApSX3tpLHR9IC0gUl97Zix0fSA9IFxoYXR7XGFscGhhfV9pICsgXGhhdHtcYmV0YX1faSBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpICsgXHZhcmVwc2lsb25fe2ksdH0KJCQKCioqVkNCKiogIAokJApSX3tcdGV4dHtWQ0J9LHR9IC0gUl97Zix0fSA9IDAuMDAwNCArIDAuNzg3NiBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKk1CQioqICAKJCQKUl97XHRleHR7TUJCfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDMgKyAxLjA3MzEgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipCSUQqKiAgCiQkClJfe1x0ZXh0e0JJRH0sdH0gLSBSX3tmLHR9ID0gMC4wMDAyICsgMS4wOTg3IFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqQ1RHKiogIAokJApSX3tcdGV4dHtDVEd9LHR9IC0gUl97Zix0fSA9IDAuMDAwMiArIDEuMTM1MiBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKlNIQioqICAKJCQKUl97XHRleHR7U0hCfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDIgKyAwLjQ4ODcgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipBQ0IqKiAgCiQkClJfe1x0ZXh0e0FDQn0sdH0gLSBSX3tmLHR9ID0gMC4wMDA1ICsgMC41MjUzIFwsXGJpZyggUl97bSx0fSAtIFJfe2YsdH0gXGJpZykKJCQKCioqU1RCKiogIAokJApSX3tcdGV4dHtTVEJ9LHR9IC0gUl97Zix0fSA9IDAuMDAwMCArIDEuMTQ3OSBcLFxiaWcoIFJfe20sdH0gLSBSX3tmLHR9IFxiaWcpCiQkCgoqKkVJQioqICAKJCQKUl97XHRleHR7RUlCfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDAgKyAwLjQ3OTMgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKKipWTl9JTkRFWCoqICAKJCQKUl97XHRleHR7Vk5cX0lOREVYfSx0fSAtIFJfe2YsdH0gPSAwLjAwMDAgKyAxLjAwMDAgXCxcYmlnKCBSX3ttLHR9IC0gUl97Zix0fSBcYmlnKQokJAoKCiMgNC40LiBM4bujaSBzdeG6pXQga8OsIHbhu41uZyBDYW1wIHbDoCBwaMOibiBsb+G6oWkgxJHhu4tuaCBnacOhCgpgYGB7cn0KIyA9PT09IDQuNCBM4buiSSBTVeG6pFQgS+G7siBW4buMTkcgQ0FQTSAmIFBIw4JOIExP4bqgSSDEkOG7ik5IIEdJw4EgPT09PQpsaWJyYXJ5KGdncmVwZWwpCgpyZl9iYXIgICAgPC0gbWVhbihob2FuZ2FuYWx5c2lzX2xvbmckcmYsIG5hLnJtID0gVFJVRSkKbWt0X2V4YmFyIDwtIG1lYW4oaG9hbmdhbmFseXNpc19sb25nJHJtX2V4Y2VzcywgbmEucm0gPSBUUlVFKQoKbWVhbl9yZWFsaXplZCA8LSBob2FuZ2FuYWx5c2lzX2xvbmcgJT4lCiAgZ3JvdXBfYnkoYXNzZXQpICU+JQogIHN1bW1hcmlzZShtZWFuX3JldCA9IG1lYW4ocmksIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpCgpjYXBtX2V2YWwgPC0gY2FwbV90YmwgJT4lCiAgbGVmdF9qb2luKG1lYW5fcmVhbGl6ZWQsIGJ5ID0gImFzc2V0IikgJT4lCiAgbXV0YXRlKAogICAgZXJfY2FwbSA9IHJmX2JhciArIGJldGEgKiBta3RfZXhiYXIsCiAgICBnYXAgICAgID0gbWVhbl9yZXQgLSBlcl9jYXBtLAogICAgcHJpY2VfZmxhZyA9IGNhc2Vfd2hlbigKICAgICAgZ2FwID4gMCAgfiAiVW5kZXJwcmljZWQiLAogICAgICBnYXAgPCAwICB+ICJPdmVycHJpY2VkIiwKICAgICAgVFJVRSAgICAgfiAiRmFpcmx5IHByaWNlZCIKICAgICkKICApCgpwcmludChjYXBtX2V2YWwpCgojIFNlY3VyaXR5IE1hcmtldCBMaW5lOiBjaOG6pW0gxJFlbiA9IEVbUl9pXV9DQVBNLCB2w7JuZyB0csOybiB0cuG6r25nID0gbWVhbl9yZXQKZ2dwbG90KGNhcG1fZXZhbCwgYWVzKHggPSBiZXRhKSkgKwogIGdlb21fYWJsaW5lKGludGVyY2VwdCA9IHJmX2Jhciwgc2xvcGUgPSBta3RfZXhiYXIpICsKICBnZW9tX3BvaW50KGFlcyh5ID0gZXJfY2FwbSksIHNpemUgPSAyKSArICAgICAgICAgICAgICAgICAgICAgIyDEkWnhu4NtIMSRZW4gKEVbUmldX0NBUE0pCiAgZ2VvbV9wb2ludChhZXMoeSA9IG1lYW5fcmV0KSwgc2hhcGUgPSAxLCBzaXplID0gMiwgc3Ryb2tlID0gMSkgKyAgIyDEkWnhu4NtIHRy4bqvbmcgKG1lYW5fcmV0KQogIGdlb21fdGV4dChhZXMoeSA9IG1lYW5fcmV0LCBsYWJlbCA9IGFzc2V0KSwgICAgICAgICAgICAgICAgICAjIDwtLSBOSMODTiBUUsOKTiDEkEnhu4JNIFRS4bquTkcKICAgICAgICAgICAgdmp1c3QgPSAtMC45LCBzaXplID0gMywgY2hlY2tfb3ZlcmxhcCA9IFRSVUUpICsKICBsYWJzKHRpdGxlID0gIlNlY3VyaXR5IE1hcmtldCBMaW5lIiwKICAgICAgIHggPSAiQmV0YSIsIHkgPSAiUmV0dXJuIikgKwogIHRoZW1lX21pbmltYWwoKQoKYGBgCgoKCgoKCg==