Capacidad calorifica específica

La capacidad calorífica es una propiedad relevante desde el punto de vista teórico, pero también para el diseño de procesos en los que este involucrados equipos intercambio de calor y reactores químicos.

La capacidad calorífica específica se define como la cantidad de calor que se debe suministar a una unidad de masa para aumentar su temperatura en \(\Delta T\) °C. Esto se escribe matemáticamente así:

\[ Q = m c_p \Delta T,\]

donde \(Q\) es el calor suministrado, \(m\) es la masa y \(c_p\) es la capacidad calorífica específica. Los experimentos para determinar \(c_p\) controlan la masa, el calor suministrado, la presión y la temperatura. Entonces, \(c_p\) se halla despejando de la expresión anterior,

\[c_p = \frac{Q}{m\Delta T}.\]

Normalmente hemos visto como los libros de termodinámica nos presentan tablas de \(c_p\), en las cuales se reportan los coeficientes de un polinomio dado un rango de temperatura, aqui les va un ejemplo extraido de colby, Tabla 7.2.3:

En este pequeño notebook vamos a realizar un ejercicio guiado para ajustar la capacidad calorífica específica del gas metano (\(CH_4\)).

Los datos

Vamos a importar un conjunto de datos experimentales del paquete CHNOSZ.

library(CHNOSZ)

file <- system.file("extdata/cpetc/HW97_Cp.csv", package = "CHNOSZ")
Cpdat <- read.csv(file)

# Agradecimientos para el alumno Ignacio Barrio por esa actualización ----------
# Filtramos el dataframe para que se quede solo CH4
Cpdat <- Cpdat[Cpdat$species == 'CH4',]

# Eliminamos la columna 'species', que solo aporta el nombre de la especie CH4
Cpdat <- subset (Cpdat, select = -c(species))
#-------------------------------------------------------------------------------
head(Cpdat)

Este paquete tiene una función para cambiar unidades. Por ejemplo, podemos cambiar \(c_p\) de Julios a calorías, y la presión de mega pascales a bares:

Cpdat$Cp <- convert(Cpdat$Cp, "cal")
Cpdat$P <- convert(Cpdat$P, "bar")
head(Cpdat)

Visualicemos los datos:

library(ggplot2)
Use suppressPackageStartupMessages() to eliminate package startup messages
ggplot(mapping = aes(x=T, y=Cp), data = Cpdat) + geom_point()

Podemos observar que hay un cambio d comportamiento alrededor de una temperatura de 669 K. Por lo tanto, requerimos de dos ecuaciones. Dividamos el conjunto de datos para luego ajustar las dos ecuaciones:

Cpdat1 <- Cpdat[Cpdat$T < 660,]
head(Cpdat1)
Cpdat2 <- Cpdat[Cpdat$T >= 660,]
head(Cpdat2)

Regresión clásica

Pregunta 1

Grafique Cpdat1 y Cpdat2 por aparte, y utilice estas gráficas como punto de partida para decidir el grado de su polinomio.

# Grafique en esta celda

Pregunta 2

Ahora, debes ajustar una ecuación polinomial para la capacidad calorífica del metano según su temperatura.

# Ajuste en esta celda un modelo con lm() para Cpdat1
# Ajuste en esta celda un modelo con lm() para Cpdat2

Herrramientas novedosas

El propio paquete CHNOSZ tiene una función llamada EOSregress(). Esta función considera tras bambalinas dos aspectos super interesantes:

  1. Utiliza la ecuación de Helgeson para \(c_p\)

\[c_p = a + \frac{b}{(T-T_0)^2} + \omega TX,\]

donde \(a\) y \(b\) son parámetros relacionados con fenómenos de no solvatación, y \(\omega\) ers un parámetro de solvatación. \(T_0\) es una temperatura de referencia (228 K) y \(X\) es la función de Born que relaciona los procesos de solvatación con las propiedades dieléctricas del agua.

¡Vaya! En este ejercicio no requerimos ninguna de estas sofisticaciones porque el metano es apolar y es gaseoso, pero lo interesante es que podríamos usar este paquete para abordar casos mucho más complejos.

Pregunta 3

Bueno, aqui es importante hacer una pregunta: ¿es la ecuación de Hegelson lineal? Responda, y justifique su respuesta.

Respuesta (escribe a continuación)


  1. Su algoritmo de ajuste utiliza la misma función lm(). Además, usa internamente la función water() para encontrar aquellas propiedades electrostáticas del agua relacionadas con la solvatación que se mencionó anteriormente.

Por ejemplo, se puede ajustar una ecuación para los datos completos así:

var <- c("invTTheta2", "TXBorn")
Cplm_high <- EOSregress(Cpdat, var)
Cplm_high$coefficients
  (Intercept)    invTTheta2        TXBorn 
     329.3733 -1247884.4469  2052194.0779 

y el paquete trae la siguiente función para graficar. Ejecute la siguiente celda y observe la gráfica.

EOSplot(Cpdat, coeficients = round(Cplm_high$coefficients, 1))

También se le puede especificar el punto de cambio, observe el siguiente código:

Cplm_low <- EOSregress(Cpdat, var, T.max = 600)
Cplm_low$coefficients
  (Intercept)    invTTheta2        TXBorn 
-1.660861e+00  4.459696e+04 -1.295538e+05 

Pregunta 4

Ahora, grafica el modelo Cplm_low por ti mismo usando la función EOSplot()y observa la diferencia con el modelo Cplm_high

# Grafica en esta celda
EOSplot(Cpdat, coefficients = round(Cplm_low$coefficients, 1))

summary(Cplm_low)

Call:
lm(formula = fmla)

Residuals:
      1       2       3       4       5 
-0.3177  1.7028 -0.5365 -2.2518  1.4032 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)  
(Intercept) -1.661e+00  5.242e+00  -0.317   0.7814  
invTTheta2   4.460e+04  2.342e+04   1.905   0.1971  
TXBorn      -1.296e+05  3.982e+04  -3.254   0.0829 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.272 on 2 degrees of freedom
Multiple R-squared:  0.8456,    Adjusted R-squared:  0.6911 
F-statistic: 5.476 on 2 and 2 DF,  p-value: 0.1544
summary(Cplm_high)

Call:
lm(formula = fmla)

Residuals:
     Min       1Q   Median       3Q      Max 
-1137.04  -123.48    31.21   196.93  1420.14 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)
(Intercept)      329.4      718.1   0.459    0.655
invTTheta2  -1247884.4  5464255.3  -0.228    0.823
TXBorn       2052194.1  2980374.9   0.689    0.504

Residual standard error: 672.7 on 12 degrees of freedom
Multiple R-squared:  0.04475,   Adjusted R-squared:  -0.1145 
F-statistic: 0.2811 on 2 and 12 DF,  p-value: 0.7598

Pregunta 5

Como mencionamos antes, EOSregress() usa a lm(). Por lo tanto, puedes usar la función summary() para indagar la calidad del ajuste. Compara los modelos Cplm_high y Cplm_low con los modelos que has ajustado antes. ¿Cuál obtiene mejor calidad de ajuste?

Respuesta (escribe a continuación)

LS0tDQp0aXRsZTogIkFqdXN0ZSBkZSBsYSBjYXBhY2lkYWQgY2Fsb3LDrWZpY2EiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIENhcGFjaWRhZCBjYWxvcmlmaWNhIGVzcGVjw61maWNhDQoNCkxhIGNhcGFjaWRhZCBjYWxvcsOtZmljYSBlcyB1bmEgcHJvcGllZGFkIHJlbGV2YW50ZSBkZXNkZSBlbCBwdW50byBkZSB2aXN0YSB0ZcOzcmljbywgcGVybyB0YW1iacOpbiBwYXJhIGVsIGRpc2XDsW8gZGUgcHJvY2Vzb3MgZW4gbG9zIHF1ZSBlc3RlIGludm9sdWNyYWRvcyBlcXVpcG9zIGludGVyY2FtYmlvIGRlIGNhbG9yIHkgcmVhY3RvcmVzIHF1w61taWNvcy4NCg0KTGEgY2FwYWNpZGFkIGNhbG9yw61maWNhIGVzcGVjw61maWNhIHNlIGRlZmluZSBjb21vIGxhIGNhbnRpZGFkIGRlIGNhbG9yIHF1ZSBzZSBkZWJlIHN1bWluaXN0YXIgYSB1bmEgdW5pZGFkIGRlIG1hc2EgcGFyYSBhdW1lbnRhciBzdSB0ZW1wZXJhdHVyYSBlbiAkXERlbHRhIFQkIMKwQy4gRXN0byBzZSBlc2NyaWJlIG1hdGVtw6F0aWNhbWVudGUgYXPDrToNCg0KJCQgUSA9IG0gY19wIFxEZWx0YSBULCQkDQoNCmRvbmRlICRRJCBlcyBlbCBjYWxvciBzdW1pbmlzdHJhZG8sICRtJCBlcyBsYSBtYXNhIHkgJGNfcCQgZXMgbGEgY2FwYWNpZGFkIGNhbG9yw61maWNhIGVzcGVjw61maWNhLiBMb3MgZXhwZXJpbWVudG9zIHBhcmEgZGV0ZXJtaW5hciAkY19wJCBjb250cm9sYW4gbGEgbWFzYSwgZWwgY2Fsb3Igc3VtaW5pc3RyYWRvLCBsYSBwcmVzacOzbiB5IGxhIHRlbXBlcmF0dXJhLiBFbnRvbmNlcywgJGNfcCQgc2UgaGFsbGEgZGVzcGVqYW5kbyBkZSBsYSBleHByZXNpw7NuIGFudGVyaW9yLA0KDQokJGNfcCA9IFxmcmFje1F9e21cRGVsdGEgVH0uJCQNCg0KDQpOb3JtYWxtZW50ZSBoZW1vcyB2aXN0byBjb21vIGxvcyBsaWJyb3MgZGUgdGVybW9kaW7DoW1pY2Egbm9zIHByZXNlbnRhbiB0YWJsYXMgZGUgJGNfcCQsIGVuIGxhcyBjdWFsZXMgc2UgcmVwb3J0YW4gbG9zIGNvZWZpY2llbnRlcyBkZSB1biBwb2xpbm9taW8gZGFkbyB1biByYW5nbyBkZSB0ZW1wZXJhdHVyYSwgYXF1aSBsZXMgdmEgdW4gZWplbXBsbyBleHRyYWlkbyBkZSBbY29sYnksIFRhYmxhIDcuMi4zXShodHRwczovL3d3dy5jb2xieS5lZHUvY2hlbWlzdHJ5L1BDaGVtL25vdGVzL0NoN1RhYmxlcy5wZGYpOg0KDQo8IS0tIGBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9JzQ1JScsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmNhcD0nVMOtcGljYSB0YWJsYSBjb24gY29lZmljaWVudGVzIGRlIHBvbGlub21pb3MgcGFyYSBjYWRhIGVzcGVjaWUuJ30gLS0+DQo8IS0tIGtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKHJlcCgndGFibGFzX2NwLnBuZycpKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQpFbiBlc3RlIHBlcXVlw7FvIG5vdGVib29rIHZhbW9zIGEgcmVhbGl6YXIgdW4gZWplcmNpY2lvIGd1aWFkbyBwYXJhIGFqdXN0YXIgbGEgY2FwYWNpZGFkIGNhbG9yw61maWNhIGVzcGVjw61maWNhIGRlbCBnYXMgbWV0YW5vICgkQ0hfNCQpLg0KDQojIyBMb3MgZGF0b3MNCg0KVmFtb3MgYSBpbXBvcnRhciB1biBjb25qdW50byBkZSBkYXRvcyBleHBlcmltZW50YWxlcyBkZWwgcGFxdWV0ZSAqKkNITk9TWioqLg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoQ0hOT1NaKQ0KDQpmaWxlIDwtIHN5c3RlbS5maWxlKCJleHRkYXRhL2NwZXRjL0hXOTdfQ3AuY3N2IiwgcGFja2FnZSA9ICJDSE5PU1oiKQ0KQ3BkYXQgPC0gcmVhZC5jc3YoZmlsZSkNCg0KIyBBZ3JhZGVjaW1pZW50b3MgcGFyYSBlbCBhbHVtbm8gSWduYWNpbyBCYXJyaW8gcG9yIGVzYSBhY3R1YWxpemFjacOzbiAtLS0tLS0tLS0tDQojIEZpbHRyYW1vcyBlbCBkYXRhZnJhbWUgcGFyYSBxdWUgc2UgcXVlZGUgc29sbyBDSDQNCkNwZGF0IDwtIENwZGF0W0NwZGF0JHNwZWNpZXMgPT0gJ0NINCcsXQ0KDQojIEVsaW1pbmFtb3MgbGEgY29sdW1uYSAnc3BlY2llcycsIHF1ZSBzb2xvIGFwb3J0YSBlbCBub21icmUgZGUgbGEgZXNwZWNpZSBDSDQNCkNwZGF0IDwtIHN1YnNldCAoQ3BkYXQsIHNlbGVjdCA9IC1jKHNwZWNpZXMpKQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmhlYWQoQ3BkYXQpDQpgYGANCg0KRXN0ZSBwYXF1ZXRlIHRpZW5lIHVuYSBmdW5jacOzbiBwYXJhIGNhbWJpYXIgdW5pZGFkZXMuIFBvciBlamVtcGxvLCBwb2RlbW9zIGNhbWJpYXIgJGNfcCQgZGUgSnVsaW9zIGEgY2Fsb3LDrWFzLCB5IGxhIHByZXNpw7NuIGRlIG1lZ2EgcGFzY2FsZXMgYSBiYXJlczoNCg0KYGBge3J9DQpDcGRhdCRDcCA8LSBjb252ZXJ0KENwZGF0JENwLCAiY2FsIikNCkNwZGF0JFAgPC0gY29udmVydChDcGRhdCRQLCAiYmFyIikNCmhlYWQoQ3BkYXQpDQpgYGANCg0KVmlzdWFsaWNlbW9zIGxvcyBkYXRvczoNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QobWFwcGluZyA9IGFlcyh4PVQsIHk9Q3ApLCBkYXRhID0gQ3BkYXQpICsgZ2VvbV9wb2ludCgpDQpgYGANCg0KUG9kZW1vcyBvYnNlcnZhciBxdWUgaGF5IHVuIGNhbWJpbyBkIGNvbXBvcnRhbWllbnRvIGFscmVkZWRvciBkZSB1bmEgdGVtcGVyYXR1cmEgZGUgNjY5IEsuIFBvciBsbyB0YW50bywgcmVxdWVyaW1vcyBkZSBkb3MgZWN1YWNpb25lcy4gRGl2aWRhbW9zIGVsIGNvbmp1bnRvIGRlIGRhdG9zIHBhcmEgbHVlZ28gYWp1c3RhciBsYXMgZG9zIGVjdWFjaW9uZXM6DQoNCmBgYHtyfQ0KQ3BkYXQxIDwtIENwZGF0W0NwZGF0JFQgPCA2NjAsXQ0KaGVhZChDcGRhdDEpDQpgYGANCg0KYGBge3J9DQpDcGRhdDIgPC0gQ3BkYXRbQ3BkYXQkVCA+PSA2NjAsXQ0KaGVhZChDcGRhdDIpDQpgYGANCg0KIyMgUmVncmVzacOzbiBjbMOhc2ljYQ0KDQoNCiMjIyBQcmVndW50YSAxDQpHcmFmaXF1ZSBgQ3BkYXQxYCB5IGBDcGRhdDJgIHBvciBhcGFydGUsIHkgdXRpbGljZSBlc3RhcyBncsOhZmljYXMgY29tbyBwdW50byBkZSBwYXJ0aWRhIHBhcmEgZGVjaWRpciBlbCBncmFkbyBkZSBzdSBwb2xpbm9taW8uDQoNCmBgYHtyfQ0KIyBHcmFmaXF1ZSBlbiBlc3RhIGNlbGRhDQoNCmBgYA0KDQotLS0NCg0KIyMjIFByZWd1bnRhIDINCkFob3JhLCBkZWJlcyBhanVzdGFyIHVuYSBlY3VhY2nDs24gcG9saW5vbWlhbCBwYXJhIGxhIGNhcGFjaWRhZCBjYWxvcsOtZmljYSBkZWwgbWV0YW5vIHNlZ8O6biBzdSB0ZW1wZXJhdHVyYS4gDQoNCmBgYHtyfQ0KIyBBanVzdGUgZW4gZXN0YSBjZWxkYSB1biBtb2RlbG8gY29uIGxtKCkgcGFyYSBDcGRhdDENCg0KYGBgDQoNCmBgYHtyfQ0KIyBBanVzdGUgZW4gZXN0YSBjZWxkYSB1biBtb2RlbG8gY29uIGxtKCkgcGFyYSBDcGRhdDINCg0KYGBgDQoNCi0tLQ0KDQojIEhlcnJyYW1pZW50YXMgbm92ZWRvc2FzDQoNCkVsIHByb3BpbyBwYXF1ZXRlICoqQ0hOT1NaKiogdGllbmUgdW5hIGZ1bmNpw7NuIGxsYW1hZGEgYEVPU3JlZ3Jlc3MoKWAuIEVzdGEgZnVuY2nDs24gY29uc2lkZXJhIHRyYXMgYmFtYmFsaW5hcyBkb3MgYXNwZWN0b3Mgc3VwZXIgaW50ZXJlc2FudGVzOg0KDQoxLiBVdGlsaXphIGxhIGVjdWFjacOzbiBkZSBIZWxnZXNvbiBwYXJhICRjX3AkDQoNCiQkY19wID0gYSArIFxmcmFje2J9eyhULVRfMCleMn0gKyBcb21lZ2EgVFgsJCQNCg0KZG9uZGUgJGEkIHkgJGIkIHNvbiBwYXLDoW1ldHJvcyByZWxhY2lvbmFkb3MgY29uIGZlbsOzbWVub3MgZGUgbm8gc29sdmF0YWNpw7NuLCB5ICRcb21lZ2EkIGVycyB1biBwYXLDoW1ldHJvIGRlIHNvbHZhdGFjacOzbi4gJFRfMCQgZXMgdW5hIHRlbXBlcmF0dXJhIGRlIHJlZmVyZW5jaWEgKDIyOCBLKSB5ICRYJCBlcyBsYSBmdW5jacOzbiBkZSBCb3JuIHF1ZSByZWxhY2lvbmEgbG9zIHByb2Nlc29zIGRlIHNvbHZhdGFjacOzbiBjb24gbGFzIHByb3BpZWRhZGVzIGRpZWzDqWN0cmljYXMgZGVsIGFndWEuDQoNCsKhVmF5YSEgRW4gZXN0ZSBlamVyY2ljaW8gbm8gcmVxdWVyaW1vcyBuaW5ndW5hIGRlIGVzdGFzIHNvZmlzdGljYWNpb25lcyBwb3JxdWUgZWwgbWV0YW5vIGVzIGFwb2xhciB5IGVzIGdhc2Vvc28sIHBlcm8gbG8gaW50ZXJlc2FudGUgZXMgcXVlIHBvZHLDrWFtb3MgdXNhciBlc3RlIHBhcXVldGUgcGFyYSBhYm9yZGFyIGNhc29zIG11Y2hvIG3DoXMgY29tcGxlam9zLg0KDQojIyMgUHJlZ3VudGEgMw0KQnVlbm8sIGFxdWkgZXMgaW1wb3J0YW50ZSBoYWNlciB1bmEgcHJlZ3VudGE6IMK/ZXMgbGEgZWN1YWNpw7NuIGRlIEhlZ2Vsc29uIGxpbmVhbD8gUmVzcG9uZGEsIHkganVzdGlmaXF1ZSBzdSByZXNwdWVzdGEuDQoNCiMjIyMgUmVzcHVlc3RhIChlc2NyaWJlIGEgY29udGludWFjacOzbikNCg0KLS0tDQoNCjIuIFN1IGFsZ29yaXRtbyBkZSBhanVzdGUgdXRpbGl6YSBsYSBtaXNtYSBmdW5jacOzbiBgbG0oKWAuIEFkZW3DoXMsIHVzYSBpbnRlcm5hbWVudGUgbGEgZnVuY2nDs24gYHdhdGVyKClgIHBhcmEgZW5jb250cmFyIGFxdWVsbGFzIHByb3BpZWRhZGVzIGVsZWN0cm9zdMOhdGljYXMgZGVsIGFndWEgcmVsYWNpb25hZGFzIGNvbiBsYSBzb2x2YXRhY2nDs24gcXVlIHNlIG1lbmNpb27DsyBhbnRlcmlvcm1lbnRlLg0KDQpQb3IgZWplbXBsbywgc2UgcHVlZGUgYWp1c3RhciB1bmEgZWN1YWNpw7NuIHBhcmEgbG9zIGRhdG9zIGNvbXBsZXRvcyBhc8OtOg0KDQpgYGB7cn0NCnZhciA8LSBjKCJpbnZUVGhldGEyIiwgIlRYQm9ybiIpDQpDcGxtX2hpZ2ggPC0gRU9TcmVncmVzcyhDcGRhdCwgdmFyKQ0KQ3BsbV9oaWdoJGNvZWZmaWNpZW50cw0KYGBgDQoNCnkgZWwgcGFxdWV0ZSB0cmFlIGxhIHNpZ3VpZW50ZSBmdW5jacOzbiBwYXJhIGdyYWZpY2FyLiBFamVjdXRlIGxhIHNpZ3VpZW50ZSBjZWxkYSB5IG9ic2VydmUgbGEgZ3LDoWZpY2EuDQoNCmBgYHtyfQ0KRU9TcGxvdChDcGRhdCwgY29lZmljaWVudHMgPSByb3VuZChDcGxtX2hpZ2gkY29lZmZpY2llbnRzLCAxKSkNCmBgYA0KDQpUYW1iacOpbiBzZSBsZSBwdWVkZSBlc3BlY2lmaWNhciBlbCBwdW50byBkZSBjYW1iaW8sIG9ic2VydmUgZWwgc2lndWllbnRlIGPDs2RpZ286DQoNCmBgYHtyfQ0KQ3BsbV9sb3cgPC0gRU9TcmVncmVzcyhDcGRhdCwgdmFyLCBULm1heCA9IDYwMCkNCkNwbG1fbG93JGNvZWZmaWNpZW50cw0KYGBgDQoNCiMjIyBQcmVndW50YSA0DQpBaG9yYSwgZ3JhZmljYSBlbCBtb2RlbG8gYENwbG1fbG93YCBwb3IgdGkgbWlzbW8gdXNhbmRvIGxhIGZ1bmNpw7NuIGBFT1NwbG90KCkgYHkgb2JzZXJ2YSBsYSBkaWZlcmVuY2lhIGNvbiBlbCBtb2RlbG8gYENwbG1faGlnaGAgDQoNCmBgYHtyfQ0KIyBHcmFmaWNhIGVuIGVzdGEgY2VsZGENCkVPU3Bsb3QoQ3BkYXQsIGNvZWZmaWNpZW50cyA9IHJvdW5kKENwbG1fbG93JGNvZWZmaWNpZW50cywgMSkpDQpzdW1tYXJ5KENwbG1fbG93KQ0Kc3VtbWFyeShDcGxtX2hpZ2gpDQpgYGANCg0KLS0tDQoNCiMjIyBQcmVndW50YSA1DQpDb21vIG1lbmNpb25hbW9zIGFudGVzLCBgRU9TcmVncmVzcygpYCB1c2EgYSBgbG0oKWAuIFBvciBsbyB0YW50bywgcHVlZGVzIHVzYXIgbGEgZnVuY2nDs24gYHN1bW1hcnkoKWAgcGFyYSBpbmRhZ2FyIGxhIGNhbGlkYWQgZGVsIGFqdXN0ZS4gQ29tcGFyYSBsb3MgbW9kZWxvcyBgQ3BsbV9oaWdoYCB5IGBDcGxtX2xvd2AgY29uIGxvcyBtb2RlbG9zIHF1ZSBoYXMgYWp1c3RhZG8gYW50ZXMuIMK/Q3XDoWwgb2J0aWVuZSBtZWpvciBjYWxpZGFkIGRlIGFqdXN0ZT8NCg0KIyMjIyBSZXNwdWVzdGEgKGVzY3JpYmUgYSBjb250aW51YWNpw7NuKQ0KDQo=